diff --git a/config/zentaopms.php b/config/zentaopms.php index d1d7953112..823209c6f1 100644 --- a/config/zentaopms.php +++ b/config/zentaopms.php @@ -395,6 +395,10 @@ define('TABLE_DESIGN', '`' . $config->db->prefix . 'design`'); define('TABLE_DESIGNSPEC', '`' . $config->db->prefix . 'designspec`'); define('TABLE_DOCLIB', '`' . $config->db->prefix . 'doclib`'); define('TABLE_DOC', '`' . $config->db->prefix . 'doc`'); +define('TABLE_DEMANDPOOL', '`' . $config->db->prefix . 'demandpool`'); +define('TABLE_DEMAND', '`' . $config->db->prefix . 'demand`'); +define('TABLE_DEMANDSPEC', '`' . $config->db->prefix . 'demandspec`'); +define('TABLE_DEMANDREVIEW', '`' . $config->db->prefix . 'demandreview`'); define('TABLE_API', '`' . $config->db->prefix . 'api`'); define('TABLE_API_SPEC', '`' . $config->db->prefix . 'apispec`'); define('TABLE_APISTRUCT', '`' . $config->db->prefix . 'apistruct`'); @@ -591,6 +595,13 @@ define('TABLE_AI_MODEL', '`' . $config->db->prefix . 'ai_model`'); define('TABLE_SQLITE_QUEUE', '`' . $config->db->prefix . 'sqlite_queue`'); +if(!defined('TABLE_ROADMAP')) define('TABLE_ROADMAP', '`' . $config->db->prefix . 'roadmap`'); +if(!defined('TABLE_ROADMAPSTORY')) define('TABLE_ROADMAPSTORY', '`' . $config->db->prefix . 'roadmapstory`'); +if(!defined('TABLE_CHARTER')) define('TABLE_CHARTER', '`' . $config->db->prefix . 'charter`'); +if(!defined('TABLE_MARKET')) define('TABLE_MARKET', '`' . $config->db->prefix . 'market`'); +if(!defined('TABLE_MARKETREPORT')) define('TABLE_MARKETREPORT', '`' . $config->db->prefix . 'marketreport`'); +if(!defined('TABLE_MARKETRESEARCH')) define('TABLE_MARKETRESEARCH', '`' . $config->db->prefix . 'project`'); + $config->objectTables['dept'] = TABLE_DEPT; $config->objectTables['product'] = TABLE_PRODUCT; $config->objectTables['productplan'] = TABLE_PRODUCTPLAN; @@ -614,6 +625,10 @@ $config->objectTables['user'] = TABLE_USER; $config->objectTables['api'] = TABLE_API; $config->objectTables['doc'] = TABLE_DOC; $config->objectTables['doclib'] = TABLE_DOCLIB; +$config->objectTables['demand'] = TABLE_DEMAND; +$config->objectTables['demandpool'] = TABLE_DEMANDPOOL; +$config->objectTables['demandspec'] = TABLE_DEMANDSPEC; +$config->objectTables['demandreview'] = TABLE_DEMANDREVIEW; $config->objectTables['todo'] = TABLE_TODO; $config->objectTables['custom'] = TABLE_LANG; $config->objectTables['branch'] = TABLE_BRANCH; @@ -671,6 +686,12 @@ $config->objectTables['design'] = TABLE_DESIGN; $config->objectTables['prompt'] = TABLE_AI_PROMPT; $config->objectTables['aiapp'] = TABLE_AI_MINIPROGRAM; $config->objectTables['miniprogram'] = TABLE_AI_MINIPROGRAM; +$config->objectTables['roadmap'] = TABLE_ROADMAP; +$config->objectTables['charter'] = TABLE_CHARTER; +$config->objectTables['market'] = TABLE_MARKET; +$config->objectTables['marketreport'] = TABLE_MARKETREPORT; +$config->objectTables['marketresearch'] = TABLE_PROJECT; +$config->objectTables['researchstage'] = TABLE_PROJECT; $config->newFeatures = array('introduction', 'tutorial', 'youngBlueTheme', 'visions', 'aiPrompts', 'promptDesign', 'promptExec'); $config->disabledFeatures = ''; diff --git a/db/update20.0.beta2.sql b/db/update20.0.beta2.sql index 36d961d7ae..5c731d6f40 100644 --- a/db/update20.0.beta2.sql +++ b/db/update20.0.beta2.sql @@ -17,3 +17,7 @@ ALTER TABLE zt_metriclib MODIFY id bigint AUTO_INCREMENT; UPDATE `zt_chart` SET `sql` = 'select tt.topProgram,tt.programID as id,tt.`year`,sum(tt.product) as product,sum(tt.plan) as plan,sum(tt.`release`) as `release`,sum(tt.story) as story,sum(tt.bug) as bug,sum(tt.doc) as doc\r\nfrom (\r\nselect t2.name as topProgram,t2.id as programID,t0.`year`,count(1) as product,0 as plan,0 as story,0 as bug,0 as `release`, 0 as doc\r\nfrom zt_product t1\r\nleft join (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) t0 on YEAR(t1.createdDate) = t0.`year`\r\nleft join zt_project t2 on t1.program = t2.id\r\nwhere t1.deleted = \'0\' and t1.shadow = \'0\'\r\nand t2.type = \'program\' and t2.grade = 1 and t2.deleted = \'0\'\r\ngroup by t2.id, t0.`year`\r\nunion all\r\nselect t3.name as topProgram,t3.id as programID,t0.`year`,0 as product,count(1) as plan,0 as story,0 as bug,0 as `release`, 0 as doc\r\nfrom zt_productplan t1\r\nleft join (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) t0 on YEAR(t1.createdDate) = t0.`year`\r\nleft join zt_product t2 on t2.id = t1.product\r\nleft join zt_project t3 on t2.program = t3.id\r\nwhere t1.deleted = \'0\'\r\nand t2.deleted = \'0\'\r\nand t3.type = \'program\' and t3.grade = 1 and t3.deleted = \'0\'\r\ngroup by t3.id, t0.`year`\r\nunion all\r\nselect t3.name as topProgram,t3.id as programID,t0.`year`,0 as product,0 as plan,0 as story,0 as bug,0 as `release`, count(1) as doc\r\nfrom zt_doc t1\r\nleft join (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) t0 on YEAR(t1.addedDate) = t0.`year`\r\nleft join zt_product t2 on t2.id = t1.product\r\nleft join zt_project t3 on t2.program = t3.id\r\nwhere t1.deleted = \'0\'\r\nand t2.deleted = \'0\'\r\nand t3.type = \'program\' and t3.grade = 1 and t3.deleted = \'0\'\r\ngroup by t3.id, t0.`year`\r\nunion all\r\nselect t3.name as topProgram,t3.id as programID,t0.`year`,0 as product,0 as plan,0 as story,0 as bug,0 as `release`, count(distinct t1.id) as doc\r\nfrom zt_doc t1\r\nleft join (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) t0 on YEAR(t1.addedDate) = t0.`year`\r\nleft join zt_projectproduct t4 on t1.project = t4.project\r\nleft join zt_product t2 on t2.id = t4.product\r\nleft join zt_project t3 on t2.program = t3.id\r\nwhere t1.deleted = \'0\'\r\nand t2.deleted = \'0\'\r\nand t3.type = \'program\' and t3.grade = 1 and t3.deleted = \'0\'\r\ngroup by t3.id, t0.`year`\r\nunion all\r\nselect t3.name as topProgram,t3.id as programID,t0.`year`,0 as product,0 as plan,0 as story,0 as bug,count(1) as `release`, 0 as doc\r\nfrom zt_release t1\r\nleft join (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) t0 on YEAR(t1.date) = t0.`year`\r\nleft join zt_product t2 on t2.id = t1.product\r\nleft join zt_project t3 on t2.program = t3.id\r\nwhere t1.deleted = \'0\'\r\nand t2.deleted = \'0\'\r\nand t3.type = \'program\' and t3.grade = 1 and t3.deleted = \'0\'\r\ngroup by t3.id, t0.`year`\r\nunion all\r\nselect t3.name as topProgram,t3.id as programID,t0.`year`,0 as product,0 as plan,count(1) as story,0 as bug,0 as `release`, 0 as doc\r\nfrom zt_story t1\r\nleft join (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) t0 on YEAR(t1.openedDate) = t0.`year`\r\nleft join zt_product t2 on t2.id = t1.product\r\nleft join zt_project t3 on t2.program = t3.id\r\nwhere t1.deleted = \'0\'\r\nand t2.deleted = \'0\'\r\nand t3.type = \'program\' and t3.grade = 1 and t3.deleted = \'0\'\r\ngroup by t3.id, t0.`year`\r\nunion all\r\nselect t3.name as topProgram,t3.id as programID,t0.`year`,0 as product,0 as plan,0 as story,count(1) as bug,0 as `release`, 0 as doc\r\nfrom zt_bug t1\r\nleft join (SELECT DISTINCT YEAR(`date`) as \'year\' FROM zt_action) t0 on YEAR(t1.openedDate) = t0.`year`\r\nleft join zt_product t2 on t2.id = t1.product\r\nleft join zt_project t3 on t2.program = t3.id\r\nwhere t1.deleted = \'0\'\r\nand t2.deleted = \'0\'\r\nand t3.type = \'program\' and t3.grade = 1 and t3.deleted = \'0\'\r\ngroup by t3.id, t0.`year`\r\n) tt\r\ngroup by tt.programID, tt.`year`' WHERE `name` = '年度新增-项目集年度新增数据汇总表'; UPDATE `zt_chart` SET `sql` = 'SELECT YEAR(t1.date) AS `year`,IFNULL(t2.realname,t1.actor) AS realname,count(1) AS count FROM zt_action t1 LEFT JOIN zt_user AS t2 ON t1.actor=t2.account where t1.actor is not null and t1.actor not in(\'\', \'system\') GROUP BY `year`,t1.actor ORDER BY `year`, `count` DESC' WHERE `name` = '年度排行-个人-禅道操作次数榜'; UPDATE `zt_chart` SET `sql` = 'SELECT t1.id, t1.NAME AS project, IFNULL( t2.NAME, \'/\') AS program, IFNULL( t3.story, 0 ) AS story, IFNULL( t3.estimate, 0 ) AS estimate, IFNULL( t4.execution, 0 ) AS execution, IFNULL( t5.workhour, 0 ) AS workhour FROM zt_project AS t1 LEFT JOIN zt_project AS t2 ON FIND_IN_SET( t2.id, t1.path ) AND t2.deleted = \'0\' AND t2.type = \'program\' AND t2.grade = 1 LEFT JOIN( SELECT t1.parent AS project, COUNT( 1 ) AS story, ROUND( SUM( t1.estimate ), 1 ) AS estimate FROM ( SELECT DISTINCT t1.parent, t3.id, t3.estimate FROM zt_project AS t1 LEFT JOIN zt_projectstory AS t2 ON t1.id = t2.project LEFT JOIN zt_story AS t3 ON t2.story = t3.id AND t3.deleted = \'0\' AND t3.stage NOT IN ( \'verified\', \'released\', \'closed\' ) WHERE t1.deleted = \'0\' AND t1.type IN ( \'sprint\', \'stage\', \'kanban\' ) AND t3.id IS NOT NULL ) AS t1 GROUP BY project ) AS t3 ON t1.id = t3.project LEFT JOIN ( SELECT parent AS project, COUNT( 1 ) AS execution FROM zt_project WHERE deleted = \'0\' AND type IN ( \'sprint\', \'stage\', \'kanban\' ) AND multiple = \'1\' AND STATUS NOT IN ( \'done\', \'closed\' ) GROUP BY project ) AS t4 ON t1.id = t4.project LEFT JOIN ( SELECT t1.parent AS project, ROUND( SUM( t2.LEFT ), 1 ) AS workhour FROM zt_project AS t1 LEFT JOIN zt_task AS t2 ON t1.id = t2.execution AND t2.deleted = \'0\' AND t2.parent < 1 WHERE t1.deleted = \'0\' AND t1.type IN ( \'sprint\', \'stage\', \'kanban\' ) AND t1.STATUS NOT IN ( \'done\', \'closed\' ) AND t2.id IS NOT NULL GROUP BY project ) AS t5 ON t1.id = t5.project WHERE t1.deleted = \'0\' AND t1.type = \'project\' AND t1.STATUS = \'doing\'' WHERE `name` = '年度进行中项目-项目剩余工作量透视表'; + +UPDATE `zt_grouppriv` SET `method` = 'recordWorkhour' WHERE `module` = 'task' AND `method` = 'recordEstimate'; +UPDATE `zt_grouppriv` SET `method` = 'editEffort' WHERE `module` = 'task' AND `method` = 'editEstimate'; +UPDATE `zt_grouppriv` SET `method` = 'deleteWorkhour' WHERE `module` = 'task' AND `method` = 'deleteEstimate'; diff --git a/doc/CHANGELOG b/doc/CHANGELOG index 9a7481802f..8d0b250ec1 100644 --- a/doc/CHANGELOG +++ b/doc/CHANGELOG @@ -1,125 +1,307 @@ -2024-04-15 20.0 +2024-04-23 20.0 完成的需求 修复的Bug 开源版: -45780 【20版本】项目集年度新增数据汇总表文档数没有统计项目和执行下的数据 -46259 【20版本】关联代码库页面字段展示空白 -46209 【20版本】测试用例页面报错 -46099 【20版本】新手教程项目概况页面有报错 -46090 【20版本】后台设置关闭软需备注为必填项关闭需求时设置不生效 -46013 【20版本】个人面板下拉被遮挡 -45936 【20版本】执行看板中转入任务弹窗中部分内容未添加英文语言项 -45916 【20版本】测试单下批量执行用例建议增加提示信息 -45552 【20版本】待处理-用例下执行用例,执行结果为失败,关闭弹窗没有刷新页面 -45541 【20版本】创建泳道时泳道颜色按钮样式异常 -45351 【20版本】产品计划删除计划提示弹窗样式未更新为最新 -45210 【20版本】设置看板泳道颜色的显示样式有误 -45168 【20版本】创建好执行后的提示语不对 -45163 【20版本】树状图和20版本需求样式不同 -45154 【20版本】删除阶段弹窗样式与20版本规范不一致 -45098 【20版本】创建融合瀑布项目,复制项目后,提示语不展示 -45083 【20版本】用例列表区块没有数据时,中间多了一条横线 -45062 【20版本】后台二开编辑器页面列表标题和缩进样式有误 -45032 【20版本】测试下提bug表单中维护模块时,点击产品跳转链接不正确 -44993 【20版本】接口空间的版本管理样式需要优化 -44899 【20版本】看板项目在设置-产品新关联产品没有历史记录 -44885 【20版本】瀑布和融合瀑布项目于产品解除关联的逻辑未修改 -44871 【20版本】敏捷项目-产品型-有迭代不能关联其他产品 -44870 【20版本】执行总览中执行总量的数据和列表对不上 -44743 【20版本】项目集白名单选择权限组后,项目集白名单内无白名单人员展示 -44694 【20版本】地盘动态的背景太暗了 -44691 【20版本】审批按钮语义不清晰 -44689 【20版本】创建执行固定团队名称字段后,勾选复制团队后未显示复制团队字段 -44681 【20版本】编辑泳道的泳道颜色样式需优化 -44635 【20版本】创建泳道的泳道颜色样式需优化 -44626 【20版本】项目的历史记录,汉化不完整 -44605 【20版本】项目列表选“全部”,选一个项目点删除,删完跳到了“进行中” -44591 【20版本】项目列表保存搜索条件,无效 -44550 【20版本】融合瀑布-项目型编辑页面不应该展示阶段类型 -44524 【20版本】地盘仪表盘使用帮助区块中,鼠标悬浮的样式奇怪 -44519 【20版本】地盘仪表盘欢迎总览区块指派给我的任务数和待处理模块不一致 -43519 【20版本】专业研发看板下设置背景色弹窗中样式不对 -42994 【20版本】批量删除用例库用例没有二次提醒 -42583 【20版本】用例导图模式下点返回后到了列表视图下 -42460 【20版本】地盘仪表盘区块的问号提示闪动 -42405 【20版本】修改日志内容后弹窗没有更新 -42306 【20版本】执行研发需求导出弹窗页导出字段中显示了平台/分支 -42274 【20版本】点击已保存的查询条件后没有自动显示 -42233 【20版本】阶段列表各tab标签下子阶段的显示优化 +31080 公司级需求完成率和Bug修复率鼠标悬停时,显示了status +31283 年度排行榜大屏中禅道操作次数帮有个人名称没有显示出来 +31554 项目剩余工作量透视表中无迭代项目的剩余执行数显示成了“1” +32497 查看BI大屏公司数据盘点产品数量对不上 +34645 内置接口文档页面其他下显示dimension和pivot +34772 产品名称较长时图表展示时右移了 +34807 图表的滚动条无法拖动 41081 【20版本】设置泳道背景色弹窗页,需再次点击才可设置颜色 -47667 【20版本】下载发布基本信息页面的附件提示没有权限访问 -46905 【20版本】操作文档库目录后,目录应不折叠 -46027 【20版本】员工负载表字段显示不完整 -45048 【20版本】用例列表自动化测试用例标签颜色 -44592 【20版本】产品列表选择某一项目集后,切换回所有项目集的交互异常 -43625 【20版本】新手教程部分页面未校验必填 -43214 【20版本】项目发布下修改附件名称保存后跳转到了发布的需求列表 -42486 【20版本】项目仪表盘[今年完成]迭代统计数量不正确 -47709 【20版本】全局搜索结果页输入ID全局搜索时搜索项重复展示 -47706 【20版本】任务记录工时保存后新增日志不能到已提交区块中 -47680 【20版本】全局搜索关键字搜索结果页面显示了二级导航 -47679 【20版本】全局搜索结果页面分页无效 -47673 【20版本】项目型项目的发布通知弹窗中选项换行显示 -47666 【20版本】发布下查看需求详情右侧会有重叠显示 -47594 【20版本】执行-bug页面报错 -47567 【20版本】已解决的bug批量解决后提示保存成功 -46466 【20版本】仅自动化下创建用例没有自动都选上自动化按钮 -46464 【20版本】关联用例默认记住了上次的查询条件,导致无法获取到可关联的用例 -46462 【20版本】套件关联用例,底部按钮被遮挡 -44667 【20版本】创建项目页,权限交互操作范围过大 -44597 【20版本】项目列表的搜索,这个按钮点了会闪 -43269 【20版本】上传php附件时未出现风险提示 -47675 【20版本】项目列表中勾选项目后点批量编辑按钮提示保存成功 -47672 【20版本】融合瀑布项目仪表盘有报错 -47663 【20版本】创建产品页面字段显示设置弹窗点击保存按钮没有反应 -47558 【20版本】接口库中创建数据结构报错 -44939 【20版本】批量编辑项目页面,计划结束不能选择长期 -43438 【20版本】用例或者场景无法拖动 -47640 【20版本】视野没BI权限,无法查看欢迎总览区块 -47457 【20版本】项目视图下选中某个项目集后创建项目页面所属项目集为自动带出 -47002 【20版本】执行下任务列表转入Bug时Bug详情页点击编辑或复制按钮后二级导航不对 -46977 【20版本】有产品无迭代项目用户需求列表页显示了按照计划关联按钮 -46497 【20版本】子场景下有用例,父场景下还提示暂无用例 -45157 【20版本】任务详情页中研发需求有变更时左侧缺少确认按钮 -45151 【20版本】编辑融合瀑布项目的自建测试阶段切换阶段类型为需求后,编辑前创建的阶段下Bug显示所属执行已删除 -45132 【20版本】创建执行页,同一个产品可以重复选择,且提示语不对 -45109 【20版本】创建执行选择运维迭代时未添加提示语 -45104 【20版本】复制执行的样式和需求不一致 -45079 【20版本】瀑布项目统计区块中进度偏差率和成本偏差率的背景颜色太暗 -45003 【20版本】项目集产品视角列表编辑产品选项缺失 -44992 【20版本】执行关联产品页面热区太小 -44950 【20版本】在小屏批量创建任务时,表单底部横向滚动条被遮挡 -44944 【20版本】当项目名称字段过长时,项目列表的延期标签不显示 -44930 【20版本】测试单阻塞的弹窗中备注字段没有居左对齐 -44923 【20版本】给项目型项目创建发布时,发布名称右侧缺少里程碑的勾选 -44915 【20版本】项目发布的通知弹窗字段没有居左对齐 -44906 【20版本】项目导出数据选择导出字段下拉框超出弹窗 -44895 【20版本】发布详情中切换的文字样式不对 -44809 【20版本】禅道客户端未兼容20版本 -44581 【20版本】勾选待定后,预算单位也只读了 -44566 【20版本】文档版本的位置不对 -44530 【20版本】执行维护团队列表没有对齐 -44528 【20版本】融合敏捷-项目型创建迭代页面“关联计划”没有对齐 -43504 【20版本】可关联的需求列表显示不友好 -43334 【20版本】接口空间接口详情页左侧标签和二级导航重叠 -43256 【20版本】项目列表按预算排序不正确 -43075 【20版本】项目关闭和激活的窗口显示过长 -42305 【20版本】创建任务默认类型为设计,建议更新为开发 +42233 【20版本】阶段列表各tab标签下子阶段的显示优化 42252 【20版本】统一列表字段加粗显示 -47449 【20版本】执行下创建用例保存后出现空白页面 -47448 【20版本】用例详情页“相关研发需求”文案部分遮挡 -47446 【20版本】待处理用例页面有代码报错 -47429 【20版本】项目列表看板视图更多按钮下样式不对 -47369 【20版本】项目和执行版本列表编辑按钮右侧显示了多余的“编辑” -47190 【20版本】创建无产品无迭代项目报错 -47180 【20版本】待处理研发需求搜索表单下拉项显示了“所属路标” -47177 【20版本】复制项目可以修改项目类型 -47036 【20版本】多分支产品批量提Bug页面项目和执行的逻辑取决了1.5及级导航 -47021 【20版本】待处理需求/Bug/用例搜索表单下拉中显示空项 -46997 【20版本】ID搜索显示的对象不正确 -46757 【20版本】升级后默认给之前的Bug截止提起设置为0000-00-00 -46450 【20版本】零用例需求批量编辑时,二级导航高亮缺失 +42274 【20版本】点击已保存的查询条件后没有自动显示 +42305 【20版本】创建任务默认类型为设计,建议更新为开发 +42306 【20版本】执行研发需求导出弹窗页导出字段中显示了平台/分支 +42405 【20版本】修改日志内容后弹窗没有更新 +42460 【20版本】地盘仪表盘区块的问号提示闪动 +42486 【20版本】项目仪表盘[今年完成]迭代统计数量不正确 +42583 【20版本】用例导图模式下点返回后到了列表视图下 +42772 【20版本】迭代燃尽图横坐标名应该在横坐标后面 +42774 【20版本】透视表左侧产品汇总列表建议与顶部产品标签对齐 +42778 【20版本】透视表左侧表名及内容建议与“更多精彩”广告语添加间隔 +42994 【20版本】批量删除用例库用例没有二次提醒 +43075 【20版本】项目关闭和激活的窗口显示过长 +43077 【20版本】BI的1.5级导航背景色显示有误 +43214 【20版本】项目发布下修改附件名称保存后跳转到了发布的需求列表 +43256 【20版本】项目列表按预算排序不正确 +43269 【20版本】上传php附件时未出现风险提示 +43334 【20版本】接口空间接口详情页左侧标签和二级导航重叠 +43438 【20版本】用例或者场景无法拖动 +43504 【20版本】可关联的需求列表显示不友好 +43519 【20版本】专业研发看板下设置背景色弹窗中样式不对 +43625 【20版本】新手教程部分页面未校验必填 +44519 【20版本】地盘仪表盘欢迎总览区块指派给我的任务数和待处理模块不一致 +44524 【20版本】地盘仪表盘使用帮助区块中,鼠标悬浮的样式奇怪 +44528 【20版本】融合敏捷-项目型创建迭代页面“关联计划”没有对齐 +44530 【20版本】执行维护团队列表没有对齐 +44550 【20版本】融合瀑布-项目型编辑页面不应该展示阶段类型 +44566 【20版本】文档版本的位置不对 +44581 【20版本】勾选待定后,预算单位也只读了 +44591 【20版本】项目列表保存搜索条件,无效 +44592 【20版本】产品列表选择某一项目集后,切换回所有项目集的交互异常 +44597 【20版本】项目列表的搜索,这个按钮点了会闪 +44605 【20版本】项目列表选“全部”,选一个项目点删除,删完跳到了“进行中” +44626 【20版本】项目的历史记录,汉化不完整 +44635 【20版本】创建泳道的泳道颜色样式需优化 +44667 【20版本】创建项目页,权限交互操作范围过大 +44681 【20版本】编辑泳道的泳道颜色样式需优化 +44689 【20版本】创建执行固定团队名称字段后,勾选复制团队后未显示复制团队字段 +44691 【20版本】审批按钮语义不清晰 +44694 【20版本】地盘动态的背景太暗了 +44743 【20版本】项目集白名单选择权限组后,项目集白名单内无白名单人员展示 +44809 【20版本】禅道客户端未兼容20版本 +44852 【20版本】产品计划搜索条件顺序错误 +44870 【20版本】执行总览中执行总量的数据和列表对不上 +44871 【20版本】敏捷项目-产品型-有迭代不能关联其他产品 +44885 【20版本】瀑布和融合瀑布项目于产品解除关联的逻辑未修改 +44895 【20版本】发布详情中切换的文字样式不对 +44899 【20版本】看板项目在设置-产品新关联产品没有历史记录 +44906 【20版本】项目导出数据选择导出字段下拉框超出弹窗 +44915 【20版本】项目发布的通知弹窗字段没有居左对齐 +44923 【20版本】给项目型项目创建发布时,发布名称右侧缺少里程碑的勾选 +44930 【20版本】测试单阻塞的弹窗中备注字段没有居左对齐 +44939 【20版本】批量编辑项目页面,计划结束不能选择长期 +44944 【20版本】当项目名称字段过长时,项目列表的延期标签不显示 +44950 【20版本】在小屏批量创建任务时,表单底部横向滚动条被遮挡 +44992 【20版本】执行关联产品页面热区太小 +44993 【20版本】接口空间的版本管理样式需要优化 +45003 【20版本】项目集产品视角列表编辑产品选项缺失 +45032 【20版本】测试下提bug表单中维护模块时,点击产品跳转链接不正确 +45048 【20版本】用例列表自动化测试用例标签颜色 +45062 【20版本】后台二开编辑器页面列表标题和缩进样式有误 +45079 【20版本】瀑布项目统计区块中进度偏差率和成本偏差率的背景颜色太暗 +45083 【20版本】用例列表区块没有数据时,中间多了一条横线 +45098 【20版本】创建融合瀑布项目,复制项目后,提示语不展示 +45104 【20版本】复制执行的样式和需求不一致 +45109 【20版本】创建执行选择运维迭代时未添加提示语 +45132 【20版本】创建执行页,同一个产品可以重复选择,且提示语不对 +45151 【20版本】编辑融合瀑布项目的自建测试阶段切换阶段类型为需求后,编辑前创建的阶段下Bug显示所属执行已删除 +45154 【20版本】删除阶段弹窗样式与20版本规范不一致 +45157 【20版本】任务详情页中研发需求有变更时左侧缺少确认按钮 +45163 【20版本】树状图和20版本需求样式不同 +45168 【20版本】创建好执行后的提示语不对 +45210 【20版本】设置看板泳道颜色的显示样式有误 +45351 【20版本】产品计划删除计划提示弹窗样式未更新为最新 +45541 【20版本】创建泳道时泳道颜色按钮样式异常 +45552 【20版本】待处理-用例下执行用例,执行结果为失败,关闭弹窗没有刷新页面 +45780 【20版本】项目集年度新增数据汇总表文档数没有统计项目和执行下的数据 +45916 【20版本】测试单下批量执行用例建议增加提示信息 +45936 【20版本】执行看板中转入任务弹窗中部分内容未添加英文语言项 +46013 【20版本】个人面板下拉被遮挡 +46027 【20版本】员工负载表字段显示不完整 +46090 【20版本】后台设置关闭软需备注为必填项关闭需求时设置不生效 +46099 【20版本】新手教程项目概况页面有报错 +46209 【20版本】测试用例页面报错 +46259 【20版本】关联代码库页面字段展示空白 46397 【20版本】创建联系人页面列表名称和选择用户字段没有必填项标识 +46413 【20版本】图表前台页面显示滚动条 +46450 【20版本】零用例需求批量编辑时,二级导航高亮缺失 +46462 【20版本】套件关联用例,底部按钮被遮挡 +46464 【20版本】关联用例默认记住了上次的查询条件,导致无法获取到可关联的用例 +46466 【20版本】仅自动化下创建用例没有自动都选上自动化按钮 +46497 【20版本】子场景下有用例,父场景下还提示暂无用例 +46757 【20版本】升级后默认给之前的Bug截止提起设置为0000-00-00 +46783 【20版本】BI升级引导弹窗中,关闭按钮和图片底部边框重合 +46905 【20版本】操作文档库目录后,目录应不折叠 +46977 【20版本】有产品无迭代项目用户需求列表页显示了按照计划关联按钮 +46997 【20版本】ID搜索显示的对象不正确 +47002 【20版本】执行下任务列表转入Bug时Bug详情页点击编辑或复制按钮后二级导航不对 +47004 【20版本】运营界面仪表盘目标数据不正确 +47021 【20版本】待处理需求/Bug/用例搜索表单下拉中显示空项 +47036 【20版本】多分支产品批量提Bug页面项目和执行的逻辑取决了1.5及级导航 +47177 【20版本】复制项目可以修改项目类型 +47180 【20版本】待处理研发需求搜索表单下拉项显示了“所属路标” +47190 【20版本】创建无产品无迭代项目报错 +47369 【20版本】项目和执行版本列表编辑按钮右侧显示了多余的“编辑” +47429 【20版本】项目列表看板视图更多按钮下样式不对 +47446 【20版本】待处理用例页面有代码报错 +47448 【20版本】用例详情页“相关研发需求”文案部分遮挡 +47449 【20版本】执行下创建用例保存后出现空白页面 +47457 【20版本】项目视图下选中某个项目集后创建项目页面所属项目集为自动带出 +47493 “按产品统计的年度完成计划数”统计不到直接关闭关闭原因为已完成的计划 +47558 【20版本】接口库中创建数据结构报错 +47567 【20版本】已解决的bug批量解决后提示保存成功 +47594 【20版本】执行-bug页面报错 +47640 【20版本】视野没BI权限,无法查看欢迎总览区块 +47663 【20版本】创建产品页面字段显示设置弹窗点击保存按钮没有反应 +47666 【20版本】发布下查看需求详情右侧会有重叠显示 +47667 【20版本】下载发布基本信息页面的附件提示没有权限访问 +47672 【20版本】融合瀑布项目仪表盘有报错 +47673 【20版本】项目型项目的发布通知弹窗中选项换行显示 +47675 【20版本】项目列表中勾选项目后点批量编辑按钮提示保存成功 +47679 【20版本】全局搜索结果页面分页无效 +47680 【20版本】全局搜索关键字搜索结果页面显示了二级导航 +47706 【20版本】任务记录工时保存后新增日志不能到已提交区块中 +47709 【20版本】全局搜索结果页输入ID全局搜索时搜索项重复展示 +47728 收到消息后,点击桌面底部大桌面图标后,没有定位到消息会话中 +47764 【20版本】设置过阶段工作量占比的项目,后台关闭该功能后,融合瀑布项目设置阶段页面的工作量占比字段依然显示 +47840 【20版本】批量添加用户时默认显示一行 +47841 【20版本】产品下创建研发需求后二级导航错乱 +47842 【20版本】无法删除产品模块 +47843 【20版本】瀑布项目设置阶段保存后有报错 +47844 【20版本】xmind导出没有导出3级用例 +47845 【20版本】测试单用例报表不显示柱状图和折线图 +47846 【20版本】创建子计划勾选待定后依然校验了超出父计划的范围 +47847 【20版本】研发需求详情页未显示研发需求细分按钮 +47848 【20版本】创建测试报告页面代码报错 +47849 【20版本】计划看板视图卡片中的更多按钮点击后不显现 +47850 目标详情页的操作按钮显示不全 +47851 【20版本】版本的编辑删除按钮显示不正确 +47852 【20版本】pms12.4.1升级20.0版本,创建有产品项目选择计划后,项目的迭代列表报错 +47853 【20版本】pms12.4.1升级20.0版本,创建无产品项目的迭代时出现报错 +47855 【20版本】研发需求变更后,关联的用例操作栏确认图标未显示 +47856 【20版本】测试视图下模块维护页面鼠标无法选中模块名称 +47857 【20版本】无产品项目下创建计划跳转到了添加产品页面 +47858 【20版本】执行版本列表和详情页缺少部分操作按钮 +47859 【20版本】用例库下编辑页面和搜索表单中显示了“所属场景” +47860 【20版本】融合瀑布项目细分阶段选择迭代/看板时页面代码报错 +47861 【20版本】升级时一致性检查报错 +47863 【20版本】用例库用例详情页显示多余的分割线 +47864 【20版本】代码关联任务页面点击搜索后有代码报错 +47865 【20版本】透视表页有报错 +47867 【20版本】系统无产品时,代码库页面的提示不对 +47868 【20版本】无产品项目列表中,关联产品按钮仍然高亮 +47869 【20版本】度量项切换分页后有报错 +47870 【20版本】20beta2版本升级到20版本,文心一言语言模型供应商的值有误 +47872 【20版本】接口文档详情页刷新页面后点击返回按钮无响应 +47873 【20版本】DevOps代码库页面不显示创建和关联代码库的按钮 +47876 【20版本】全局提词使用时,报错:API 返回值为空或返回了错误 +47877 【20版本】项无产品添加计划页面点击返回跳转到了添加产品页面 +47878 【20版本】[未解决bug指派表]表头缺少中文语言项 +47880 【20版本】客户端初始化左侧导航栏有重叠 +47882 【20版本】图表无条件点击查询后不再展示图表 +47883 【20版本】编辑用例步骤拖拽排序不生效 +47886 【20版本】编辑用例步骤宽度不够 +47887 【20版本】新手教程顶部出现了白条 +47889 【20版本】鼠标拖动无法选中内容 +47890 【20版本】用例关联的需求变更后,用例详情页确认按钮被遮挡 +47892 【20版本】左侧导航右键菜单空白了 +47893 【20版本】用例详情页点击需求弹窗中的按钮,以页面形式打开 +47894 【20版本】度量项中日期不显示月和日 +47895 【20版本】登录时填写系统不存在用户名时点击登录没有提示 +47896 【20版本】用例详情页点击需求弹窗中的撤销评审按钮,弹窗未刷新 +47897 【20版本】编辑待定状态的子计划,修改结束日期后保存,子计划仍然是待定状态 +47898 【20版本】添加GitFox应用保存时提示文案不对 +47899 【20版本】从用例库导入用例列表进入用例详情页后操作按钮缺失 +47901 【20版本】安装导入demo数据有报错 +47903 【20版本】测试报告详情页悬浮不展示按钮名 +47905 【20版本】编辑测试单页面不显示页面title +47906 【20版本】待处理下编辑测试单页面保存按钮显示成了“编辑测试单” +47907 【20版本】待处理下测试单概况页点击编辑后二级导航未高亮 +47908 【20版本】批量执行用例有报错 +47910 【20版本】项目版本列表有代码报错 +47911 【20版本】没有部分项目操作权限时,项目列表的操作栏中仍然高亮相应的操作按钮 +47913 【20版本】上传文件过大的提示信息中显示%s +47914 【20版本】批量添加用户,密码输入框和横向滚动条重合了 +47915 【20版本】测试-bug报表图中没有显示值 +47917 【20版本】升级前有创建项目的权限,升级后没了 +47918 【20版本】创建项目集页面白名单使用联系人方式添加没有添加上 +47920 【20版本】项目研发/用户需求列表页点击模块设置时跳转不正确 +47924 【20版本】编辑模块没有负责人字段 +47925 【20版本】用需变更时没有列出影响范围 +47926 【20版本】选择模块后,指派给没默认显示模块负责人 +47930 【20版本】编辑模块页面,所属产品字段宽度不一致 +47932 【20版本】执行测试单下执行用例有报错 +47934 【20版本】用例列表查看自动化脚本报错 +47936 【20版本】执行1.5级导航都应显示项目/执行名 +47937 【20版本】批量添加任务,显示2个加载样式 +47938 【20版本】开源版显示了提词设计按钮 +47939 【20版本】创建/编辑用例页面自动化脚本处允许的文件类型不能上传 +47949 【20版本】多分支产品研发需求页面显示设置中没有显示分支的设置 +47950 【20版本】无法查看软需的相关研发需求 +47951 【20版本】软需详情页中相关研发需求没有选中样式 +47952 【20版本】自动化用例不能上传自动化脚本 +47962 导出产品列表文件中变更中显示已变更 +47965 【20版本】后台显示多余的度量项权限 +47968 【20版本】项目版本的详情页点击编辑出现zui报错 +47969 【20版本】编辑和批量编辑软需计划选择范围不一致 +47970 【20版本】开源版显示了[重置调试]权限 +47971 【20版本】项目测试下Bug转任务的弹窗中切换项目后,所属执行显示为ID +47972 【20版本】编辑数据结构页面有报错 +47973 【20版本】版本管理弹窗页显示了无用滚动条 +47976 【20版本】没有选择模块时样式不正确 +47978 【20版本】动态页面有报错 +47979 【20版本】执行提词后,没有重新生成按钮 +47980 【20版本】上下架小程序和提词,动态中缺少中文语言项 +47983 【20版本】[产品缺陷数据汇总表]不展示数据 +47984 【20版本】没有项目时进入项目文档,索引页面显示太大 +47985 【20版本】变更研发需求,影响的项目执行数为0 +47986 【20版本】接口空间添加目录时输入框下边框遮挡 +47990 【20版本】产品空间下附件库列表需求详情页删除需求后页面和导航不对应 +47992 【20版本】透视表查看原始数据报错 +47995 【20版本】透视表、图表的分组树没有显示分组名称 +48000 【20版本】下载xxd报错 +48010 【20版本】win一键安装包首次登录后页面有代码报错 +48013 【20版本】仪表盘下未完成执行统计区块切换执行时报错 +48029 【20版本】团队下度量项未显示且进入组合查看页面报错 +48031 【20版本】导出xml格式的任务,导出的文件中含有文字格式代码 +48033 【20版本】删除模块没有保留最后一行 +48034 【20版本】客户端应用颜色有误 +48036 【20版本】1366*768分辨率下chrom浏览器中选择项目管理方式弹窗中有上下滑动条 +48039 【20版本】IPD的表常量定义应该写到config/zentaopms.php下,否则本地开源版仪表盘会报错 +48040 【20版本】创建项目集刷新页面后变为添加子项目集页面 +48041 【20版本】编辑单人任务为多人任务后团队弹窗中样式显示错误 +48043 【20版本】IPD1.3升级到IPD1.5beta1替换授权后页面空白 +48044 【20版本】项目下批量移除需求不生效 +48045 【20版本】项目/执行下可以关联父需求 +48047 【20版本】研发需求详情页代码报错 +48048 【20版本】编辑父需求后子需求不显示在父需求详情页 +48050 【20版本】无产品无迭代项目看板中批量提Bug,所属执行带出了影子执行的ID +48051 【20版本】项目看板中批量上传研发需求多图上传失败 +48053 【20版本】设置阶段为非里程碑阶段,创建出的阶段显示了里程碑icon +48055 【20版本】无产品无迭代项目看板中可以移除研发需求 +48056 【20版本】测试单关联用例页面代码报错 +48057 【20版本】点击删除接口空间目录动态后跳转错误 +48058 【20版本】无产品无迭代项目看板中任务导入Bug弹窗切换页码后才会出现返回按钮 +48059 【20版本】内置透视表的标题展示有误 +48060 【20版本】无产品无迭代项目中任务导入Bug页面的返回按钮跳转到了执行下 +48062 【20版本】完成任务弹窗中的“实际开始”字段没有必填标识 +48063 【20版本】全局搜索目标,点击后报错 +48064 【20版本】子研发需求详情页有报错 +48065 【20版本】执行测试单用例分组视图下移除用例时有报错 +48067 【20版本】测试用例分组视图下类型下拉中未显示“单元测试” +48070 【20版本】目录的文件夹排序按钮不可操作 +48071 【20版本】编辑文档的目录在英文语言项下字段显示不完整 +48073 【20版本】修改度量项筛选按钮的默认、悬浮与选中的样式 +48074 【20版本】文件关联的需求显示不全 +48076 【20版本】代码文件关联任务复选框没对齐 +48078 【20版本】运营界面无法复制项目 +48079 【20版本】用例库导入csv不显示步骤和预期 +48081 【20版本】用例库用例详情页有报错 +48082 【20版本】无产品无迭代看板下建任务,弹窗跳转到了别的执行 +48084 【20版本】无迭代项目下研发需求转任务有所属执行字段 +48086 【20版本】运营界面目标设置页有报错 +48087 【20版本】运营项目下设置看板提示看板代号不能为空 +48088 【20版本】运营界面项目目标详情页有报错 +48098 【20版本】后台二次开发下左侧模块树显示了排序按钮但不可用 +48099 【20版本】linux一键包运营界面创建项目及看板,看板卡片中有代码显示 +48101 【20版本】运营管理界面编辑目标代码报错 +48102 【20版本】无产品无迭代项目用户需求细分成了子研发需求 +48103 【20版本】测试视图下Bug详情页有报错 +48104 【20版本】运营界面查看任务报表1.5级导航没有选择项目 +48105 【20版本】运营管理界面下复制项目页名称换行 +48107 【20版本】点击开始备份后F12有报错 +48111 【20版本】专业研发看板下版本列表点击提交测试/查看Bug后导航和页面不对应 +48113 【20版本】测试用例导入xmind控制台报错 +48114 【20版本】创建自动化用例后返回用例列表,自动勾选了“仅自动化” +48116 【20版本】下载大桌面弹窗异常 +48117 【20版本】自动化用例无法执行 +48119 【20版本】全局搜索结果页面有报错 +48126 【20版本】复制用例用例名称和所属模块未带出 +48127 【20版本】用例库导入测试用例页面所属模块不应该显示必填标识 +48128 【20版本】自动化用例详情页没有执行按钮 +48130 【20版本】效能管理维度下完成项目工时透视表页点击查看原始数据后有报错 +48142 【20版本】人员批量编辑相关字段没有自动带过来 +48150 【20版本】运营管理界面下复制项目页显示2个确认按钮 +48159 【20版本】运营界面任务详情页显示了子任务按钮但不可用 +48162 【20版本】切换到研发综合界面下后显示了运营界面下的执行 +48171 【20版本】效能管理维度下完成项目工时透视表页面有报错 +48178 【20版本】执行下创建用例不显示在执行用例列表中 +48194 【20版本】脑图查看用例没列出预期 +48202 【20版本】运营界面下专业研发看板头像中文案未居中 2024-04-12 18.12 完成的需求 diff --git a/extension/lite/common/ext/lang/de/lite.php b/extension/lite/common/ext/lang/de/lite.php index a5a7cc9331..f653cfe325 100644 --- a/extension/lite/common/ext/lang/de/lite.php +++ b/extension/lite/common/ext/lang/de/lite.php @@ -1,4 +1,9 @@ productLink); +list($projectModule, $projectMethod) = explode('-', $config->projectLink); +list($executionModule, $executionMethod) = explode('-', $config->executionLink); + $lang->execution->common = 'Kanban'; $lang->executionCommon = 'Kanban'; $lang->task->common = 'Task'; @@ -72,7 +77,6 @@ $lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'sub $lang->my->menu->task = array('link' => "{$lang->task->common}|my|work|mode=task&type=assignedTo", 'subModule' => 'task'); $lang->my->menu->contacts = array('link' => "{$lang->contact->common}|my|managecontacts|"); -global $config; if($config->edition != 'open') $lang->my->menu->effort = array('link' => 'Effort|effort|calendar|', 'exclude' => 'my-todo'); /* My menu order. */ @@ -194,7 +198,6 @@ $lang->createObjects['kanban'] = 'Kanban'; $lang->createIcons['execution'] = 'kanban'; /* Xuan */ -global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); diff --git a/extension/lite/common/ext/lang/en/lite.php b/extension/lite/common/ext/lang/en/lite.php index a5a7cc9331..f653cfe325 100644 --- a/extension/lite/common/ext/lang/en/lite.php +++ b/extension/lite/common/ext/lang/en/lite.php @@ -1,4 +1,9 @@ productLink); +list($projectModule, $projectMethod) = explode('-', $config->projectLink); +list($executionModule, $executionMethod) = explode('-', $config->executionLink); + $lang->execution->common = 'Kanban'; $lang->executionCommon = 'Kanban'; $lang->task->common = 'Task'; @@ -72,7 +77,6 @@ $lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'sub $lang->my->menu->task = array('link' => "{$lang->task->common}|my|work|mode=task&type=assignedTo", 'subModule' => 'task'); $lang->my->menu->contacts = array('link' => "{$lang->contact->common}|my|managecontacts|"); -global $config; if($config->edition != 'open') $lang->my->menu->effort = array('link' => 'Effort|effort|calendar|', 'exclude' => 'my-todo'); /* My menu order. */ @@ -194,7 +198,6 @@ $lang->createObjects['kanban'] = 'Kanban'; $lang->createIcons['execution'] = 'kanban'; /* Xuan */ -global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); diff --git a/extension/lite/common/ext/lang/fr/lite.php b/extension/lite/common/ext/lang/fr/lite.php index a5a7cc9331..f653cfe325 100644 --- a/extension/lite/common/ext/lang/fr/lite.php +++ b/extension/lite/common/ext/lang/fr/lite.php @@ -1,4 +1,9 @@ productLink); +list($projectModule, $projectMethod) = explode('-', $config->projectLink); +list($executionModule, $executionMethod) = explode('-', $config->executionLink); + $lang->execution->common = 'Kanban'; $lang->executionCommon = 'Kanban'; $lang->task->common = 'Task'; @@ -72,7 +77,6 @@ $lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'sub $lang->my->menu->task = array('link' => "{$lang->task->common}|my|work|mode=task&type=assignedTo", 'subModule' => 'task'); $lang->my->menu->contacts = array('link' => "{$lang->contact->common}|my|managecontacts|"); -global $config; if($config->edition != 'open') $lang->my->menu->effort = array('link' => 'Effort|effort|calendar|', 'exclude' => 'my-todo'); /* My menu order. */ @@ -194,7 +198,6 @@ $lang->createObjects['kanban'] = 'Kanban'; $lang->createIcons['execution'] = 'kanban'; /* Xuan */ -global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); diff --git a/extension/lite/common/ext/lang/zh-cn/lite.php b/extension/lite/common/ext/lang/zh-cn/lite.php index 362af7c3bf..b7cbf9e966 100644 --- a/extension/lite/common/ext/lang/zh-cn/lite.php +++ b/extension/lite/common/ext/lang/zh-cn/lite.php @@ -1,4 +1,9 @@ productLink); +list($projectModule, $projectMethod) = explode('-', $config->projectLink); +list($executionModule, $executionMethod) = explode('-', $config->executionLink); + $lang->execution->common = '看板'; $lang->executionCommon = '看板'; $lang->task->common = '任务'; @@ -72,7 +77,6 @@ $lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'sub $lang->my->menu->task = array('link' => "{$lang->task->common}|my|contribute|mode=task&type=assignedTo", 'subModule' => 'task'); $lang->my->menu->contacts = array('link' => "{$lang->contact->common}|my|managecontacts|"); -global $config; if($config->edition != 'open') $lang->my->menu->effort = array('link' => '日志|effort|calendar|', 'exclude' => 'my-todo'); /* My menu order. */ @@ -195,7 +199,6 @@ $lang->createObjects['kanban'] = '通用看板'; $lang->createIcons['execution'] = 'kanban'; /* Xuan */ -global $config; if(isset($config->xuanxuan) && strpos($config->visions, ',rnd,') === false) { $lang->xuanxuan = new stdclass(); diff --git a/extension/lite/custom/ext/lang/de/lite.php b/extension/lite/custom/ext/lang/de/lite.php index f65e2686c7..cdb20705d0 100644 --- a/extension/lite/custom/ext/lang/de/lite.php +++ b/extension/lite/custom/ext/lang/de/lite.php @@ -19,6 +19,6 @@ $lang->custom->story->fields['reviewRules'] = 'Review Rules'; $lang->custom->story->fields['reviewResultList'] = 'Review Result'; $lang->custom->story->fields['review'] = 'Need Review'; -$lang->custom->execution = new stdClass(); +$lang->custom->execution = new stdclass(); $lang->custom->system = array('required'); diff --git a/extension/lite/custom/ext/lang/en/lite.php b/extension/lite/custom/ext/lang/en/lite.php index f65e2686c7..cdb20705d0 100644 --- a/extension/lite/custom/ext/lang/en/lite.php +++ b/extension/lite/custom/ext/lang/en/lite.php @@ -19,6 +19,6 @@ $lang->custom->story->fields['reviewRules'] = 'Review Rules'; $lang->custom->story->fields['reviewResultList'] = 'Review Result'; $lang->custom->story->fields['review'] = 'Need Review'; -$lang->custom->execution = new stdClass(); +$lang->custom->execution = new stdclass(); $lang->custom->system = array('required'); diff --git a/extension/lite/custom/ext/lang/fr/lite.php b/extension/lite/custom/ext/lang/fr/lite.php index f65e2686c7..cdb20705d0 100644 --- a/extension/lite/custom/ext/lang/fr/lite.php +++ b/extension/lite/custom/ext/lang/fr/lite.php @@ -19,6 +19,6 @@ $lang->custom->story->fields['reviewRules'] = 'Review Rules'; $lang->custom->story->fields['reviewResultList'] = 'Review Result'; $lang->custom->story->fields['review'] = 'Need Review'; -$lang->custom->execution = new stdClass(); +$lang->custom->execution = new stdclass(); $lang->custom->system = array('required'); diff --git a/extension/lite/custom/ext/lang/zh-cn/lite.php b/extension/lite/custom/ext/lang/zh-cn/lite.php index 01c12af1d1..e272ecd7c6 100644 --- a/extension/lite/custom/ext/lang/zh-cn/lite.php +++ b/extension/lite/custom/ext/lang/zh-cn/lite.php @@ -19,6 +19,6 @@ $lang->custom->story->fields['reviewRules'] = '评审规则'; $lang->custom->story->fields['reviewResultList'] = '评审结果'; $lang->custom->story->fields['review'] = '评审流程'; -$lang->custom->execution = new stdClass(); +$lang->custom->execution = new stdclass(); $lang->custom->system = array('required'); diff --git a/extension/lite/project/ext/css/execution/lite.ui.css b/extension/lite/project/ext/css/execution/lite.ui.css index 0648627757..76d95bb4ea 100644 --- a/extension/lite/project/ext/css/execution/lite.ui.css +++ b/extension/lite/project/ext/css/execution/lite.ui.css @@ -7,16 +7,14 @@ .kanban-card .kanban-actions .dropdown-menu.pull-right {top:31px; right: -84px; left: auto;} .kanban-card .kanban-actions .dropdown-menu.pull-left {top:31px; right:-1px; left: auto;} .kanban-card .kanban-desc {color: #838a9d; word-break:break-all; height: 85px; overflow: hidden; display: -webkit-box;} -.kanban-card .kanban-members {float: left; height: 24px; line-height: 24px;} .kanban-card .kanban-members > div {display: inline-block; height: 24px;} .kanban-card .kanban-members > div + div {margin-left: -5px;} -.kanban-card .kanban-members > div > .avatar {display: inline-block; width: 24px !important; height: 24px !important; line-height: 24px; margin-right: 1px;} .kanban-card .kanban-members > span {display: inline-block; color: transparent; width: 2px; height: 2px; background-color: #8990a2; position: relative; border-radius: 50%; top: 3px; margin: 0 3px;} .kanban-card .kanban-members > span:before, .kanban-card .kanban-members > span:after {content: ''; display: block; position: absolute; width: 2px; height: 2px; background-color: #8990a2; top: 0; border-radius: 50%} .kanban-card .kanban-members > span:before {left: -4px;} .kanban-card .kanban-members > span:after {right: -4px;} -.kanban-card .kanban-members-count {display: inline-block; margin-left: 6px; position: relative; top: 3px} +.kanban-card .kanban-members-count {display: inline-block; position: relative; top: 3px} .kanban-card .kanban-acl {position: absolute; right: 0px; bottom: 2px; color: #838a9d;} .kanban-card .label.kanban-status-wait {background-color: #E5E5E5; color: #808080;} .kanban-card .label.kanban-status-doing {background-color: #DDF4DF; color: #38B03F;} diff --git a/extension/lite/project/ext/ui/create.html.php b/extension/lite/project/ext/ui/create.html.php index 2826e05592..0716f7a869 100644 --- a/extension/lite/project/ext/ui/create.html.php +++ b/extension/lite/project/ext/ui/create.html.php @@ -217,20 +217,6 @@ modalTrigger ) ), - to::footer - ( - div - ( - setClass('flex mt-4 w-full justify-center'), - btn - ( - setClass('px-6'), - set::type('primary'), - on::click($copySelectedProject), - $lang->confirm - ) - ) - ), div ( set::id('copyProjects'), diff --git a/extension/lite/project/ext/ui/execution.html.php b/extension/lite/project/ext/ui/execution.html.php index a876e2c4fb..46dfc22114 100644 --- a/extension/lite/project/ext/ui/execution.html.php +++ b/extension/lite/project/ext/ui/execution.html.php @@ -37,7 +37,7 @@ $fnGetKanbanTeams = function($kanbanID) use ($memberGroup, $users, $usersAvatar) $teamElements[] = div ( set::title(zget($users, $member->account)), - userAvatar(set::avatar(zget($usersAvatar, $member->account)), set::account($member->account), set::realname(zget($member, 'realname', ''))), + avatar(set::src(zget($usersAvatar, $member->account)), set::text(zget($member, 'realname', '')), set::size('sm'), set::className('mr-1')), ); } if(count($teams) > 4) $teamElements[] = span('… '); @@ -47,7 +47,7 @@ $fnGetKanbanTeams = function($kanbanID) use ($memberGroup, $users, $usersAvatar) $teamElements[] = div ( set::title(zget($users, $lastMember->account)), - userAvatar(set::avatar(zget($usersAvatar, $lastMember->account)), set::account($lastMember->account), set::realname(zget($lastMember, 'realname', '')), set::style(array('width' => '24px', 'height' => '24px'))), + avatar(set::src(zget($usersAvatar, $lastMember->account)), set::text(zget($lastMember, 'realname', '')), set::size('sm')), ); } return $teamElements; diff --git a/extension/lite/task/ext/config/lite.php b/extension/lite/task/ext/config/lite.php index 076a194eab..76394495d1 100644 --- a/extension/lite/task/ext/config/lite.php +++ b/extension/lite/task/ext/config/lite.php @@ -12,5 +12,5 @@ $config->task->dtable->fieldList['lane']['sortType'] = false; $config->task->dtable->fieldList['name']['data-toggle'] = 'modal'; $config->task->dtable->fieldList['name']['data-size'] = 'lg'; -$config->task->view->operateList['main'] = array('assignTo', 'start', 'restart', 'recordWorkhour', 'pause', 'finish', 'activate', 'close', 'cancel'); -$config->task->view->operateList['common'] = array('edit', 'delete', 'view'); +$config->task->actions->view['mainActions'] = array('assignTo', 'start', 'restart', 'recordWorkhour', 'pause', 'finish', 'activate', 'close', 'cancel'); +$config->task->actions->view['suffixActions'] = array('edit', 'delete', 'view'); diff --git a/extension/xuanxuan/extension/xuan/index/ext/ui/index.xuanxuan.html.hook.php b/extension/xuanxuan/extension/xuan/index/ext/ui/index.xuanxuan.html.hook.php index 42d48b8470..38c7df8242 100644 --- a/extension/xuanxuan/extension/xuan/index/ext/ui/index.xuanxuan.html.hook.php +++ b/extension/xuanxuan/extension/xuan/index/ext/ui/index.xuanxuan.html.hook.php @@ -34,78 +34,4 @@ $(document).on('hideapp', function(e, app) window.open('xxc://extension.zentao-integrated.hideAppMenuItem/' + encodeURIComponent(JSON.stringify({id: app.code, openedApps:Object.keys($.apps.openedApps)}))); }); - -control->loadModel('im'); -$xxdStatus = $im->getXxdStatus(); -if(isset($config->xuanxuan->turnon) && $config->xuanxuan->turnon && $xxdStatus == 'online') -{ - $xuanConfig = new stdclass(); - $token = $im->userGetAuthToken($app->user->id, 'zentaoweb'); - $clientUrl = isset($config->webClientUrl) ? $config->webClientUrl : 'data/xuanxuan/web/index.html'; - $backendUrl = $im->getServer('zentao'); - - $xuanConfig->clientUrl = $clientUrl; - $xuanConfig->server = ($config->xuanxuan->https == 'on' ? 'https' : 'http') . '://' . parse_url($backendUrl, PHP_URL_HOST) . ':' . $config->xuanxuan->commonPort; - $xuanConfig->account = $app->user->account; - $xuanConfig->authKey = $token->token; - $xuanConfig->debug = $config->debug; -} -?> - - -getWebRoot() . 'data/xuanxuan/sdk/sdk.min.js'); ?> - -getClientLang()); ?> - - diff --git a/extension/xuanxuan/extension/xuan/user/ext/lang/en/xuanxuan.php b/extension/xuanxuan/extension/xuan/user/ext/lang/en/xuanxuan.php index d2a3bc7ac6..3fb99baddd 100644 --- a/extension/xuanxuan/extension/xuan/user/ext/lang/en/xuanxuan.php +++ b/extension/xuanxuan/extension/xuan/user/ext/lang/en/xuanxuan.php @@ -1,7 +1,7 @@ user->tokenInvalid = "Token denied, please login with password."; -if(strpos($_SERVER['HTTP_USER_AGENT'], 'xuanxuan') != false) +if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'xuanxuan') != false) { $lang->user->errorDeny = "Sorry, your access to %2\$s of %1\$s is denied. Please contact your Admin to get privileges."; } diff --git a/framework/base/helper.class.php b/framework/base/helper.class.php index 2f39a16bd8..a1eb4cfca2 100644 --- a/framework/base/helper.class.php +++ b/framework/base/helper.class.php @@ -15,6 +15,17 @@ declare(strict_types=1); */ class baseHelper { + + /** + * 已加载的目录. + * The loaded directories. + * + * @static + * @var array + * @access public + */ + static $loadedDirs = array(); + /** * 设置一个对象的成员变量。 * Set the member's value of one object. @@ -665,6 +676,7 @@ class baseHelper static public function ls($dir, $pattern = '') { if(empty($dir)) return array(); + if(isset(self::$loadedDirs[$dir][$pattern])) return self::$loadedDirs[$dir][$pattern]; $files = array(); $dir = realpath($dir); @@ -672,7 +684,10 @@ class baseHelper if($dir === false) return array(); if(is_dir($dir)) $files = glob($dir . DIRECTORY_SEPARATOR . '*' . $pattern); - return empty($files) ? array() : $files; + + self::$loadedDirs[$dir][$pattern] = $files ?: array(); + + return self::$loadedDirs[$dir][$pattern]; } /** diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 77226b0b65..72a1b6e3ff 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -287,6 +287,16 @@ class baseRouter */ static $loadedLangs = array(); + /** + * 已加载的模块. + * Modules loaded. + * + * @static + * @var array + * @access public + */ + static $loadedModules = array(); + /** * 全局$lang对象。 * The global $lang object. @@ -466,9 +476,6 @@ class baseRouter */ public function setClient(): void { - $this->setOpenApp(); - $this->setSuperVars(); - $this->startSession(); if($this->config->framework->multiSite) $this->setSiteCode() && $this->loadExtraConfig(); @@ -480,6 +487,9 @@ class baseRouter if($this->config->framework->multiLanguage) $this->loadLang('common'); if($this->config->framework->multiTheme) $this->setClientTheme(); + + $this->setOpenApp(); + $this->setSuperVars(); } /** @@ -859,7 +869,7 @@ class baseRouter $account = isset($_SESSION['user']) ? $_SESSION['user']->account : ''; if(empty($account) and isset($_POST['account'])) $account = $_POST['account']; if(empty($account) and isset($_GET['account'])) $account = $_GET['account']; - if(empty($account)) $account = $this->cookie->za; + if(empty($account) and isset($_COOKIE['za'])) $account = $_COOKIE['za']; $vision = ''; $sql = new sql(); @@ -1308,8 +1318,9 @@ class baseRouter { $this->clientDevice = 'desktop'; - if($this->cookie->device == 'mobile') $this->clientDevice = 'mobile'; - if($this->cookie->device == 'desktop') $this->clientDevice = 'desktop'; + $cookieDevice = zget($_COOKIE, 'device', 'desktop'); + if($cookieDevice == 'mobile') $this->clientDevice = 'mobile'; + if($cookieDevice == 'desktop') $this->clientDevice = 'desktop'; if(empty($this->cookie->device) || !str_contains('mobile,desktop', (string) $this->cookie->device)) { @@ -2917,30 +2928,35 @@ class baseRouter * 加载语言文件,返回全局$lang对象。 * Load lang and return it as the global lang object. * - * @param string $moduleName the module name + * @param string $moduleName the module name * @param string $appName the app name * @access public - * @return bool|object the lang object or false. + * @return object the lang object */ - public function loadLang(string $moduleName, string $appName = ''): bool|object + public function loadLang(string $moduleName, string $appName = ''): object { - /* 计算最终要加载的语言文件。 Get the lang files to be loaded. */ - $langFilesToLoad = $this->getMainAndExtFiles($moduleName, $appName, 'lang'); - if(empty($langFilesToLoad)) return false; - /* 加载语言文件。Load lang files. */ global $lang; if(!is_object($lang)) $lang = new language(); if(!isset($lang->$moduleName)) $lang->$moduleName = new stdclass(); + if(isset(self::$loadedModules[$moduleName])) return $lang; + + self::$loadedModules[$moduleName] = $moduleName; + + /* 计算最终要加载的语言文件。 Get the lang files to be loaded. */ + $langFilesToLoad = $this->getMainAndExtFiles($moduleName, $appName, 'lang'); + if(empty($langFilesToLoad)) return $lang; + foreach($langFilesToLoad as $langFile) { - if(in_array($langFile, self::$loadedLangs)) continue; + if(isset(self::$loadedLangs[$langFile])) continue; include $langFile; - self::$loadedLangs[] = $langFile; + self::$loadedLangs[$langFile] = $langFile; } $this->lang = $lang; + return $lang; } diff --git a/framework/helper.class.php b/framework/helper.class.php index 4cd5e1cd5a..02022d66c3 100644 --- a/framework/helper.class.php +++ b/framework/helper.class.php @@ -717,8 +717,8 @@ function initItemActions(object &$item, string $actionMenu, array $actionList, o $module = $actionConfig['url']['module']; if(!$notLoadModel) { - $rowModule = $module == 'projectbuild' ? 'build' : $module; - $model = $app->control->loadModel($rowModule); + $rawModule = $module == 'projectbuild' ? 'build' : $module; + $model = $app->control->loadModel($rawModule); } } diff --git a/framework/router.class.php b/framework/router.class.php index cdb6070d0d..76b6733c95 100755 --- a/framework/router.class.php +++ b/framework/router.class.php @@ -122,9 +122,9 @@ class router extends baseRouter * @param string $moduleName the module name * @param string $appName the app name * @access public - * @return bool|object the lang object or false. + * @return object the lang object or false. */ - public function loadLang($moduleName, $appName = ''): bool|object + public function loadLang($moduleName, $appName = ''): object { global $lang; if(!is_object($lang)) $lang = new language(); @@ -296,7 +296,7 @@ class router extends baseRouter $config->executionLink = 'execution-task'; /* Get user preference. */ - $account = $this->session->user->account ?? ''; + $account = $_SESSION['user']->account ?? ''; $userSetting = array(); if($this->dbh and !empty($this->config->db->name) and $account) { diff --git a/lib/sqlparser/vendor/composer/platform_check.php b/lib/sqlparser/vendor/composer/platform_check.php index 589e9e770b..7f2efc1a1a 100644 --- a/lib/sqlparser/vendor/composer/platform_check.php +++ b/lib/sqlparser/vendor/composer/platform_check.php @@ -4,7 +4,7 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 70200)) { +if (!(PHP_VERSION_ID >= 50400)) { $issues[] = 'Your Composer dependencies require a PHP version ">= 7.2.0". You are running ' . PHP_VERSION . '.'; } diff --git a/lib/zin/wg/backbtn/v1.php b/lib/zin/wg/backbtn/v1.php index e3fe5940db..77bfcb94bc 100644 --- a/lib/zin/wg/backbtn/v1.php +++ b/lib/zin/wg/backbtn/v1.php @@ -48,7 +48,7 @@ class backBtn extends btn '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,story-change', '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,story-change,my-index', 'testsuite' => 'testsuite-browse,testsuite-view,', - 'testtask' => 'testtask-browse,testtask-cases,qa-index,testcase-browse,my-index', + 'testtask' => 'testtask-browse,testtask-cases,qa-index,testcase-browse,execution-build,my-index', 'testreport' => 'testreport-browse,project-testreport,execution-testreport,execution-testtask', 'tree' => 'product-browse,project-browse,execution-task,bug-browse,projectstory-story,host-browse,execution-story,feedback-admin,testcase-browse,caselib-browse', 'doc' => 'doc-mySpace,doc-productSpace,doc-projectSpace,doc-teamSpace,doc-view,execution-doc', diff --git a/lib/zin/wg/docmenu/js/v1.js b/lib/zin/wg/docmenu/js/v1.js index 0eab0a6c47..53f3cda4be 100644 --- a/lib/zin/wg/docmenu/js/v1.js +++ b/lib/zin/wg/docmenu/js/v1.js @@ -65,7 +65,7 @@ window.addModule = function(id, addType) document.getElementById("moduleName").addEventListener('blur', saveModule); document.getElementById("moduleName").addEventListener('keydown', function(e) { - if(e.keyCode == 13) saveModule.call(this); + if(e.keyCode == 13) e.target.blur(); }); }, 1); } diff --git a/misc/ci/Jenkinsfile b/misc/ci/Jenkinsfile index a7119e5de5..319bcfc3d8 100644 --- a/misc/ci/Jenkinsfile +++ b/misc/ci/Jenkinsfile @@ -185,6 +185,15 @@ pipeline { } } + stage("xuan") { + steps { + container('package') { + sh 'cd $SRC_ZENTAOEXT_PATH && make xuan' + sh 'cd $SRC_ZENTAOEXT_PATH && make encrypt-xuan UUID=`uuidgen`' + } + } + } + stage("中转") { steps { container('package') { diff --git a/module/account/config/form.php b/module/account/config/form.php index ade8db8d40..fc30a45e93 100644 --- a/module/account/config/form.php +++ b/module/account/config/form.php @@ -1,5 +1,4 @@ account->form = new stdclass(); $config->account->form->create = array(); $config->account->form->create['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); @@ -12,7 +11,6 @@ $config->account->form->create['mobile'] = array('type' => 'string', 'requi $config->account->form->create['type'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); $config->account->form->create['status'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); $config->account->form->create['extra'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); -$config->account->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->account->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->account->form->edit = array(); @@ -26,5 +24,4 @@ $config->account->form->edit['mobile'] = array('type' => 'string', 'required $config->account->form->edit['type'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); $config->account->form->edit['status'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); $config->account->form->edit['extra'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); -$config->account->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->account->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); diff --git a/module/account/control.php b/module/account/control.php index 38454784b9..6f26839022 100644 --- a/module/account/control.php +++ b/module/account/control.php @@ -63,7 +63,9 @@ class account extends control { if($_POST) { - $account = form::data($this->config->account->form->create)->get(); + $account = form::data($this->config->account->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->account->create($account); @@ -90,7 +92,9 @@ class account extends control { if($_POST) { - $account = form::data($this->config->account->form->edit)->get(); + $account = form::data($this->config->account->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->account->update($accountID, $account); diff --git a/module/action/model.php b/module/action/model.php index 84c71827dc..5cbd72d371 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -319,10 +319,14 @@ class actionModel extends model } } + if(isset($typeTrashes['execution'])) $noMultipleExecutions = $this->dao->select('id')->from(TABLE_EXECUTION)->where('multiple')->eq('0')->andWhere('id')->in($typeTrashes['execution'])->fetchPairs(); + /* 将对象名称字段添加到回收站数据中。 */ /* Add name field to the trashes. */ - foreach($trashes as $trash) + foreach($trashes as $key => $trash) { + if($trash->objectType == 'execution' && isset($noMultipleExecutions[$trash->objectID])) unset($trashes[$key]); + if($trash->objectType == 'pipeline' && isset($objectNames['gitlab'][$trash->objectID])) $trash->objectType = 'gitlab'; if($trash->objectType == 'pipeline' && isset($objectNames['jenkins'][$trash->objectID])) $trash->objectType = 'jenkins'; @@ -1951,6 +1955,10 @@ class actionModel extends model $productID = $this->loadModel('product')->getProductIDByProject($object->id);; $this->dao->update(TABLE_PRODUCT)->set('name')->eq($object->name)->set('deleted')->eq(0)->where('id')->eq($productID)->exec(); } + + /* 恢复隐藏执行。 */ + /* Resotre hidden execution. */ + if($action->objectType == 'project' && !$object->multiple) $this->dao->update(TABLE_EXECUTION)->set('deleted')->eq('0')->where('project')->eq($object->id)->andWhere('multiple')->eq('0')->exec(); } if($action->objectType == 'doc' && $object->files) $this->dao->update(TABLE_FILE)->set('deleted')->eq('0')->where('id')->in($object->files)->exec(); diff --git a/module/aiapp/js/square.ui.js b/module/aiapp/js/square.ui.js index ee104baa38..ce7af33c54 100644 --- a/module/aiapp/js/square.ui.js +++ b/module/aiapp/js/square.ui.js @@ -19,5 +19,6 @@ window.aiSquare.handleStarBtnClick = function(e) $btn.children('img').attr('src', 'static/svg/star-empty.svg'); $btn.attr('data-url', $btn.attr('data-url').replace('true', 'false')); } + if(category == 'collection') loadCurrentPage(); }, 'json'); }; diff --git a/module/aiapp/ui/square.html.php b/module/aiapp/ui/square.html.php index 0d60f7bd99..a50c819245 100644 --- a/module/aiapp/ui/square.html.php +++ b/module/aiapp/ui/square.html.php @@ -3,6 +3,8 @@ declare(strict_types=1); namespace zin; +jsVar('category', $category); + $navItems = array(); $showTag = in_array($category, array('collection', 'discovery', 'latest')); diff --git a/module/artifactrepo/config/form.php b/module/artifactrepo/config/form.php index 2717a607d1..864b8521a2 100644 --- a/module/artifactrepo/config/form.php +++ b/module/artifactrepo/config/form.php @@ -1,7 +1,6 @@ artifactrepo->form = new stdclass(); $config->artifactrepo->form->create = array(); $config->artifactrepo->form->create['name'] = array('required' => true, 'type' => 'string'); @@ -11,12 +10,9 @@ $config->artifactrepo->form->create['type'] = array('required' => true, $config->artifactrepo->form->create['status'] = array('required' => true, 'type' => 'string'); $config->artifactrepo->form->create['products'] = array('required' => false, 'type' => 'array', 'default' => array(), 'filter' => 'join'); $config->artifactrepo->form->create['format'] = array('required' => false, 'type' => 'string', 'default' => ''); -$config->artifactrepo->form->create['createdBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account); -$config->artifactrepo->form->create['editedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account); $config->artifactrepo->form->create['createdDate'] = array('required' => false, 'type' => 'string', 'default' => helper::now()); $config->artifactrepo->form->edit = array(); $config->artifactrepo->form->edit['name'] = array('required' => true, 'type' => 'string'); $config->artifactrepo->form->edit['products'] = array('required' => false, 'type' => 'array', 'default' => array(), 'filter' => 'join'); -$config->artifactrepo->form->edit['editedBy'] = array('required' => false, 'type' => 'string', 'default' => $app->user->account); $config->artifactrepo->form->edit['editedDate'] = array('required' => false, 'type' => 'string', 'default' => helper::now()); diff --git a/module/artifactrepo/control.php b/module/artifactrepo/control.php index 2f26a03487..683cebed88 100644 --- a/module/artifactrepo/control.php +++ b/module/artifactrepo/control.php @@ -56,7 +56,9 @@ class artifactrepo extends control { if($_POST) { - $repo = form::data($this->config->artifactrepo->form->create)->get(); + $repo = form::data($this->config->artifactrepo->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); if($repo->products) $repo->products = ',' . $repo->products . ','; $repoID = $this->artifactrepo->create($repo); @@ -85,7 +87,9 @@ class artifactrepo extends control { if($_POST) { - $repo = form::data($this->config->artifactrepo->form->edit)->get(); + $repo = form::data($this->config->artifactrepo->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); if($repo->products) $repo->products = ',' . $repo->products . ','; $this->artifactrepo->update($repo, $artifactRepoID); diff --git a/module/backup/model.php b/module/backup/model.php index bcfa92ccd3..852d7f89be 100644 --- a/module/backup/model.php +++ b/module/backup/model.php @@ -326,7 +326,11 @@ class backupModel extends model public function getBackupDirProgress(string $backup): array { $tmpLogFile = $this->getTmpLogFile($backup); - if(file_exists($tmpLogFile)) return json_decode(file_get_contents($tmpLogFile), true); + if(file_exists($tmpLogFile)) + { + $log = json_decode(file_get_contents($tmpLogFile), true); + return empty($log) ? array() : $log; + } return array(); } @@ -433,8 +437,9 @@ class backupModel extends model public function getDirSize(string $dir): int { if(!file_exists($dir)) return 0; + if(!is_readable($dir)) return 0; $totalSize = 0; - $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS)); + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::LEAVES_ONLY, RecursiveIteratorIterator::CATCH_GET_CHILD); foreach($iterator as $file) $totalSize += $file->getSize(); return $totalSize; diff --git a/module/block/css/guideblock.ui.css b/module/block/css/guideblock.ui.css index 1a3cb4fd4a..e7bec74c24 100644 --- a/module/block/css/guideblock.ui.css +++ b/module/block/css/guideblock.ui.css @@ -13,7 +13,7 @@ .guide-block .flowchart .flow-item > div:before {border-left-color: #fff; z-index: 1;} .guide-block .flowchart .flow-item > div > div {display: flow-root; overflow: hidden;}.ie-8 .flow-item > div {margin-right: 10px}.flow-item-0 > div {color: #FFF; font-weight: 400;} .guide-block .flowchart .flow-item-0 > div:before {display: none;} -.guide-block .flowchart {.flow-item-1, .flow-item-2, .flow-item-3, .flow-item-4, .flow-item-5 {background-image: url('static/svg/arrow-white.svg');}} +.guide-block .flowchart .flow-item-arrow {background-image: url('static/svg/arrow-white.svg');} .guide-block .flowchart .flow-item-display {overflow: hidden; white-space:nowrap; text-overflow: clip; font-size: 12px;} .guide-block .theme-switch div.theme-default {color: #3785ff;} diff --git a/module/block/ui/assigntomeblock.html.php b/module/block/ui/assigntomeblock.html.php index 92bdef8632..20412dd0aa 100644 --- a/module/block/ui/assigntomeblock.html.php +++ b/module/block/ui/assigntomeblock.html.php @@ -88,14 +88,15 @@ foreach($hasViewPriv as $type => $bool) $statusList = array(); foreach($data as $review) { - $review->module = $review->type; - $reviewType = $review->type; if($reviewType == 'projectreview') $reviewType = 'review'; + $review->module = $reviewType; + $typeName = ''; if(isset($lang->{$review->type}->common)) $typeName = $lang->{$review->type}->common; if($reviewType == 'story') $typeName = $review->storyType == 'story' ? $lang->SRCommon : $lang->URCommon; + if($review->type == 'projectreview') $typeName = $lang->project->common; if(isset($lang->$reviewType->statusList)) $statusList = array_merge($statusList, $lang->$reviewType->statusList); if($reviewType == 'attend') $statusList = array_merge($statusList, $lang->attend->reviewStatusList); diff --git a/module/block/ui/executionstatisticblock.html.php b/module/block/ui/executionstatisticblock.html.php index d219e23ed2..6dbd1d7361 100644 --- a/module/block/ui/executionstatisticblock.html.php +++ b/module/block/ui/executionstatisticblock.html.php @@ -254,7 +254,7 @@ statisticBlock ), set::block($block), set::active($active), - set::moreLink(createLink('execution', 'all', 'status=' . $block->params->type)), + set::moreLink(createLink('execution', 'all', 'status=' . zget($block->params, 'type', ''))), set::items($items), $blockView, ); diff --git a/module/block/ui/flowchart.html.php b/module/block/ui/flowchart.html.php index 698b589b39..bd46ae2a6c 100644 --- a/module/block/ui/flowchart.html.php +++ b/module/block/ui/flowchart.html.php @@ -28,13 +28,14 @@ function printFlowchart() { $items[] = div ( - set('class', 'flow-item flow-item-' . $index++), + set('class', "flow-item flow-item-$index " . ($index >= 1 ? 'flow-item-arrow' : '')), div ( set('class', 'flow-item-display'), $flowItem ) ); + $index ++; } $charts[] = div ( diff --git a/module/block/ui/guideblock.html.php b/module/block/ui/guideblock.html.php index e1224c90a5..2cd8529107 100644 --- a/module/block/ui/guideblock.html.php +++ b/module/block/ui/guideblock.html.php @@ -95,7 +95,7 @@ blockPanel setClass('guide-block'), to::heading ( - !commonModel::isTutorialMode() ? btn + !commonModel::isTutorialMode() && $config->vision == 'rnd' ? btn ( set::url('tutorial', 'start'), set::type('warning'), diff --git a/module/block/zen.php b/module/block/zen.php index 1e3e38ff1d..f1e20310f3 100644 --- a/module/block/zen.php +++ b/module/block/zen.php @@ -2012,7 +2012,7 @@ class blockZen extends block if(common::hasPriv('todo', 'view')) $hasViewPriv['todo'] = true; if(common::hasPriv('demand', 'view') && $this->config->edition == 'ipd' && $this->config->vision == 'or') $hasViewPriv['demand'] = true; - if(common::hasPriv('task', 'view')) $hasViewPriv['task'] = true; + if((common::hasPriv('task', 'view') && $this->config->vision == 'rnd') || (common::hasPriv('marketresearch', 'viewTask') && $this->config->vision == 'or')) $hasViewPriv['task'] = true; if(common::hasPriv('story', 'view') && $this->config->vision != 'lite') $hasViewPriv['story'] = true; if($this->config->URAndSR && common::hasPriv('story', 'view') && $this->config->vision != 'lite') $hasViewPriv['requirement'] = true; if(common::hasPriv('bug', 'view') && !in_array($this->config->vision, array('lite', 'or'))) $hasViewPriv['bug'] = true; @@ -2147,6 +2147,9 @@ class blockZen extends block $this->view->depts = $this->loadModel('dept')->getOptionMenu(); } + /* Compatible with the logic of the back button on the old page. */ + $this->session->set('demandList', $this->createLink('my', 'index'), 'my'); + $this->view->users = $this->loadModel('user')->getPairs('all,noletter'); $this->view->isExternalCall = $this->isExternalCall(); $this->view->hasViewPriv = $hasViewPriv; diff --git a/module/bug/config.php b/module/bug/config.php index 1fea40ed24..78baf22335 100755 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -157,6 +157,7 @@ $config->bug->actionList['delete']['hint'] = $lang->bug->delete; $config->bug->actionList['delete']['url'] = array('module' => 'bug', 'method' => 'delete', 'params' => 'bugID={id}'); $config->bug->actionList['delete']['className'] = 'ajax-submit'; $config->bug->actionList['delete']['data-confirm'] = array('message' => $lang->bug->notice->confirmDelete, 'icon' => 'icon-exclamation-sign', 'iconClass' => 'warning-pale rounded-full icon-2x'); +$config->bug->actionList['delete']['notInModal'] = true; $config->bug->actionList['createBranch']['icon'] = 'treemap'; $config->bug->actionList['createBranch']['hint'] = $lang->bug->codeBranch; diff --git a/module/bug/control.php b/module/bug/control.php index c76f8f5ebf..d79fb6d6ad 100755 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -457,7 +457,8 @@ class bug extends control /* Set menu. */ $this->qa->setMenu($oldBug->product, $oldBug->branch); - $users = $this->loadModel('user')->getPairs('noclosed'); + $users = $this->loadModel('user')->getPairs('noclosed'); + $builds = $this->loadModel('build')->getBuildPairs(array($oldBug->product), $oldBug->branch, 'withbranch,noreleased'); /* 展示相关变量。 */ /* Show the variables associated. */ @@ -467,7 +468,7 @@ class bug extends control $this->view->users = $users; $this->view->assignedTo = isset($users[$oldBug->openedBy]) ? $oldBug->openedBy : $this->bug->getModuleOwner($oldBug->module, $oldBug->product); $this->view->executions = $this->loadModel('product')->getExecutionPairsByProduct($oldBug->product, $oldBug->branch ? "0,{$oldBug->branch}" : '0', (int)$oldBug->project, 'stagefilter'); - $this->view->builds = $this->loadModel('build')->getBuildPairs(array($oldBug->product), $oldBug->branch, 'withbranch,noreleased'); + $this->view->builds = $this->bugZen->addReleaseLabelForBuilds($oldBug->product, $builds); $this->view->actions = $this->loadModel('action')->getList('bug', $bugID); $this->display(); } diff --git a/module/bug/ui/resolve.html.php b/module/bug/ui/resolve.html.php index bf45658f27..4091802c61 100644 --- a/module/bug/ui/resolve.html.php +++ b/module/bug/ui/resolve.html.php @@ -92,6 +92,9 @@ formPanel set::required(strpos(",{$config->bug->resolve->requiredFields},", ',resolvedBuild,') !== false), picker ( + set::popWidth('auto'), + set::popMaxWidth('300px'), + set::popMinWidth('145px'), set::name('resolvedBuild'), set::value(''), set::items($builds) diff --git a/module/bug/zen.php b/module/bug/zen.php index bdf67b0c0f..b454ba0d5a 100644 --- a/module/bug/zen.php +++ b/module/bug/zen.php @@ -995,6 +995,7 @@ class bugZen extends bug { $builds = $this->build->getBuildPairs(array($productID), $branch, 'noempty,noterminate,nodone,withbranch,noreleased'); } + $builds = $this->addReleaseLabelForBuilds($productID, $builds); return $this->updateBug($bug, array('builds' => $builds)); } @@ -1213,10 +1214,13 @@ class bugZen extends bug $cases = $this->loadmodel('testcase')->getPairsByProduct($bug->product, array(0, $bug->branch), $case->title, $this->config->maxCount); } + $resolvedBuilds = $this->build->getBuildPairs(array($bug->product), $bug->branch, 'noempty'); + $resolvedBuilds = $this->addReleaseLabelForBuilds($bug->product, $resolvedBuilds); + $this->config->moreLinks['case'] = inlink('ajaxGetProductCases', "bugID={$bug->id}"); $this->view->openedBuilds = $openedBuilds; - $this->view->resolvedBuilds = $this->build->getBuildPairs(array($bug->product), $bug->branch, 'noempty'); + $this->view->resolvedBuilds = $resolvedBuilds; $this->view->plans = $this->loadModel('productplan')->getPairs($bug->product, $bug->branch, '', true); $this->view->stories = $bug->execution ? $this->story->getExecutionStoryPairs($bug->execution) : $this->story->getProductStoryPairs($bug->product, $bug->branch, 0, 'all', 'id_desc', 0, 'full', 'story', false); $this->view->tasks = $this->task->getExecutionTaskPairs($bug->execution); @@ -2398,4 +2402,32 @@ class bugZen extends bug return $chartOption; } + + /** + * 给版本中的发布增加标识。 + * Add label for the release in the builds. + * + * @param int $productID + * @param array $builds + * @access protected + * @return array + */ + protected function addReleaseLabelForBuilds(int $productID, array $builds): array + { + $releases = $this->loadModel('build')->getRelatedReleases(array($productID)); + + $buildItems = array(); + foreach($builds as $buildID => $buildName) + { + $buildItem = array('value' => $buildID, 'text' => $buildName); + if(isset($releases[$buildID])) $buildItem['content'] = array('html' => "
{$buildName}
", 'class' => 'w-full flex nowrap'); + $buildItems[$buildID] = $buildItem; + } + foreach($releases as $release) + { + if(isset($buildItems[$release->shadow])) $buildItems[$release->shadow]['content'] = array('html' => "
{$buildItems[$release->shadow]['text']}
", 'class' => 'w-full flex nowrap'); + } + + return array_values($buildItems); + } } diff --git a/module/build/config/form.php b/module/build/config/form.php index 0798b3274c..7b20f78dd6 100644 --- a/module/build/config/form.php +++ b/module/build/config/form.php @@ -17,7 +17,7 @@ $config->build->form->create['builds'] = array('type' => 'array', 'r $config->build->form->create['bugs'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->build->form->create['stories'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->build->form->create['date'] = array('type' => 'date', 'required' => true, 'default' => helper::today()); -$config->build->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->build->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->build->form->create['createdDate'] = array('type' => 'datetime ', 'required' => false, 'default' => $now); $config->build->form->edit['execution'] = array('type' => 'int', 'required' => $app->tab == 'execution', 'default' => 0); diff --git a/module/build/control.php b/module/build/control.php index 7d32f284d3..35514661d3 100644 --- a/module/build/control.php +++ b/module/build/control.php @@ -49,7 +49,7 @@ class build extends control { if(!empty($_POST)) { - $build = form::data()->get(); + $build = form::data()->setDefault('createdBy', $this->app->user->account)->get(); if(!empty($_FILES['buildFiles'])) $_FILES['files'] = $_FILES['buildFiles']; unset($_FILES['buildFiles']); if(dao::isError()) return $this->sendError(dao::getError()); diff --git a/module/build/model.php b/module/build/model.php index da457dc062..426fdebbae 100644 --- a/module/build/model.php +++ b/module/build/model.php @@ -263,30 +263,8 @@ class buildModel extends model /* if the build has been released and replace is true, replace build name with release name. */ if($replace) { - $releases = $this->dao->select('t1.id,t1.shadow,t1.product,t1.branch,t1.build,t1.name,t1.date,t3.name as branchName,t4.type as productType')->from(TABLE_RELEASE)->alias('t1') - ->leftJoin(TABLE_BUILD)->alias('t2')->on('FIND_IN_SET(t2.id, t1.build)') - ->leftJoin(TABLE_BRANCH)->alias('t3')->on('FIND_IN_SET(t3.id, t1.branch)') - ->leftJoin(TABLE_PRODUCT)->alias('t4')->on('t1.product=t4.id') - ->where('t1.product')->in($productIdList) - ->beginIF(!empty($buildIdList))->andWhere('t2.id')->in($buildIdList)->fi() - ->andWhere('t1.deleted')->eq(0) - ->andWhere('t1.shadow')->ne(0) - ->fetchAll('id'); - - /* Get the buildID under the shadow product. */ - $shadows = $this->dao->select('shadow')->from(TABLE_RELEASE)->where('product')->in($productIdList)->fetchPairs('shadow', 'shadow'); - if($shadows) - { - /* Append releases of only shadow and not link build. */ - $releases += $this->dao->select('t1.id,t1.shadow,t1.product,t1.branch,t1.build,t1.name,t1.date,t2.name as branchName,t3.type as productType')->from(TABLE_RELEASE)->alias('t1') - ->leftJoin(TABLE_BRANCH)->alias('t2')->on('FIND_IN_SET(t2.id, t1.branch)') - ->leftJoin(TABLE_PRODUCT)->alias('t3')->on('t1.product=t3.id') - ->where('t1.shadow')->in($shadows) - ->andWhere('t1.build')->eq(0) - ->andWhere('t1.deleted')->eq(0) - ->fetchAll('id'); - } - $builds = $this->replaceNameWithRelease($allBuilds, $builds, $releases, $branch, $params, $excludedReleaseIdList); + $releases = $this->getRelatedReleases($productIdList, $buildIdList, $shadows); + $builds = $this->replaceNameWithRelease($allBuilds, $builds, $releases, $branch, $params, $excludedReleaseIdList); } krsort($builds); @@ -409,6 +387,43 @@ class buildModel extends model return $builds; } + /** + * 获取关联的发布。 + * Get releated release. + * + * @param array|int $productIdList + * @param string $buildIdList + * @param array|bool $shadows + * @access public + * @return array + */ + public function getRelatedReleases(array|int $productIdList, string $buildIdList = '', array|bool $shadows = false): array + { + $releases = $this->dao->select('t1.id,t1.shadow,t1.product,t1.branch,t1.build,t1.name,t1.date,t3.name as branchName,t4.type as productType')->from(TABLE_RELEASE)->alias('t1') + ->leftJoin(TABLE_BUILD)->alias('t2')->on('FIND_IN_SET(t2.id, t1.build)') + ->leftJoin(TABLE_BRANCH)->alias('t3')->on('FIND_IN_SET(t3.id, t1.branch)') + ->leftJoin(TABLE_PRODUCT)->alias('t4')->on('t1.product=t4.id') + ->where('t1.product')->in($productIdList) + ->beginIF(!empty($buildIdList))->andWhere('t2.id')->in($buildIdList)->fi() + ->andWhere('t1.deleted')->eq(0) + ->andWhere('t1.shadow')->ne(0) + ->fetchAll('id'); + + if($shadows === false) $shadows = $this->dao->select('shadow')->from(TABLE_RELEASE)->where('product')->in($productIdList)->fetchPairs('shadow', 'shadow'); // Get the buildID under the shadow product. + if($shadows) + { + /* Append releases of only shadow and not link build. */ + $releases += $this->dao->select('t1.id,t1.shadow,t1.product,t1.branch,t1.build,t1.name,t1.date,t2.name as branchName,t3.type as productType')->from(TABLE_RELEASE)->alias('t1') + ->leftJoin(TABLE_BRANCH)->alias('t2')->on('FIND_IN_SET(t2.id, t1.branch)') + ->leftJoin(TABLE_PRODUCT)->alias('t3')->on('t1.product=t3.id') + ->where('t1.shadow')->in($shadows) + ->andWhere('t1.build')->eq(0) + ->andWhere('t1.deleted')->eq(0) + ->fetchAll('id'); + } + return $releases; + } + /** * 获取最后一次创建的版本信息。 * Get the last build. diff --git a/module/custom/lang/de.php b/module/custom/lang/de.php index 50bc7b0e21..17fa08fb33 100644 --- a/module/custom/lang/de.php +++ b/module/custom/lang/de.php @@ -63,6 +63,7 @@ $lang->custom->setPercent = "Enable or Disable {$lang->stage->percent} $lang->custom->beginAndEndDate = 'Begin & End'; $lang->custom->beginAndEndDateRange = 'The Range Of Begin & End'; $lang->custom->limitTaskDateAction = 'Set start and end date required'; +$lang->custom->closedSetting = 'Close Setting'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; diff --git a/module/custom/lang/en.php b/module/custom/lang/en.php index 906fcf7911..e31d1da4ac 100644 --- a/module/custom/lang/en.php +++ b/module/custom/lang/en.php @@ -63,6 +63,7 @@ $lang->custom->setPercent = "Enable or Disable {$lang->stage->percent} $lang->custom->beginAndEndDate = 'Begin & End'; $lang->custom->beginAndEndDateRange = 'The Range Of Begin & End'; $lang->custom->limitTaskDateAction = 'Set start and end date required'; +$lang->custom->closedSetting = 'Close Setting'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; diff --git a/module/custom/lang/fr.php b/module/custom/lang/fr.php index 634a258671..15faf5be2e 100644 --- a/module/custom/lang/fr.php +++ b/module/custom/lang/fr.php @@ -63,6 +63,7 @@ $lang->custom->setPercent = "Enable or Disable {$lang->stage->percent} $lang->custom->beginAndEndDate = 'Begin & End'; $lang->custom->beginAndEndDateRange = 'The Range Of Begin & End'; $lang->custom->limitTaskDateAction = 'Set start and end date required'; +$lang->custom->closedSetting = 'Close Setting'; $lang->custom->unitList['efficiency'] = 'Working Hours/'; $lang->custom->unitList['manhour'] = 'Man-hour/'; diff --git a/module/custom/lang/zh-cn.php b/module/custom/lang/zh-cn.php index f5be356858..1457012bf5 100644 --- a/module/custom/lang/zh-cn.php +++ b/module/custom/lang/zh-cn.php @@ -63,6 +63,7 @@ $lang->custom->setPercent = "是否启用{$lang->stage->percent}"; $lang->custom->beginAndEndDate = '起止日期'; $lang->custom->beginAndEndDateRange = '起止日期范围'; $lang->custom->limitTaskDateAction = '设置起止日期必填'; +$lang->custom->closedSetting = '关闭设置'; $lang->custom->unitList['efficiency'] = '工时/'; $lang->custom->unitList['manhour'] = '人时/'; diff --git a/module/custom/ui/execution.html.php b/module/custom/ui/execution.html.php index 18b8946d46..72b44a5c42 100644 --- a/module/custom/ui/execution.html.php +++ b/module/custom/ui/execution.html.php @@ -25,7 +25,7 @@ div span ( setClass('text-md font-bold'), - $lang->custom->$module->fields[$module] + $lang->custom->closedSetting ), formGroup ( diff --git a/module/dataview/lang/de.php b/module/dataview/lang/de.php index 79cfcf936f..6c28aa6018 100644 --- a/module/dataview/lang/de.php +++ b/module/dataview/lang/de.php @@ -100,9 +100,9 @@ $lang->dataview->objects['testrun'] = 'testrun'; $lang->dataview->objects['testcase'] = 'testcase'; $lang->dataview->objects['testresult'] = 'result'; $lang->dataview->objects['casemodule'] = 'case module'; -$lang->dataview->objects['feedback'] = 'Feedback'; $lang->dataview->objects['action'] = 'Action'; $lang->dataview->objects['effort'] = 'Effort'; +if($this->config->edition != 'open') $lang->dataview->objects['feedback'] = 'Feedback'; $lang->dataview->tables = array(); $lang->dataview->tables['build'] = array('name' => 'Build', 'desc' => ''); diff --git a/module/dataview/lang/en.php b/module/dataview/lang/en.php index 79cfcf936f..6c28aa6018 100644 --- a/module/dataview/lang/en.php +++ b/module/dataview/lang/en.php @@ -100,9 +100,9 @@ $lang->dataview->objects['testrun'] = 'testrun'; $lang->dataview->objects['testcase'] = 'testcase'; $lang->dataview->objects['testresult'] = 'result'; $lang->dataview->objects['casemodule'] = 'case module'; -$lang->dataview->objects['feedback'] = 'Feedback'; $lang->dataview->objects['action'] = 'Action'; $lang->dataview->objects['effort'] = 'Effort'; +if($this->config->edition != 'open') $lang->dataview->objects['feedback'] = 'Feedback'; $lang->dataview->tables = array(); $lang->dataview->tables['build'] = array('name' => 'Build', 'desc' => ''); diff --git a/module/dataview/lang/fr.php b/module/dataview/lang/fr.php index 79cfcf936f..6c28aa6018 100644 --- a/module/dataview/lang/fr.php +++ b/module/dataview/lang/fr.php @@ -100,9 +100,9 @@ $lang->dataview->objects['testrun'] = 'testrun'; $lang->dataview->objects['testcase'] = 'testcase'; $lang->dataview->objects['testresult'] = 'result'; $lang->dataview->objects['casemodule'] = 'case module'; -$lang->dataview->objects['feedback'] = 'Feedback'; $lang->dataview->objects['action'] = 'Action'; $lang->dataview->objects['effort'] = 'Effort'; +if($this->config->edition != 'open') $lang->dataview->objects['feedback'] = 'Feedback'; $lang->dataview->tables = array(); $lang->dataview->tables['build'] = array('name' => 'Build', 'desc' => ''); diff --git a/module/dataview/lang/zh-cn.php b/module/dataview/lang/zh-cn.php index 8f819c490b..ca697ec1a9 100644 --- a/module/dataview/lang/zh-cn.php +++ b/module/dataview/lang/zh-cn.php @@ -100,9 +100,9 @@ $lang->dataview->objects['testrun'] = '测试执行'; $lang->dataview->objects['testcase'] = '测试用例'; $lang->dataview->objects['testresult'] = '执行结果'; $lang->dataview->objects['casemodule'] = '用例模块'; -$lang->dataview->objects['feedback'] = '反馈'; $lang->dataview->objects['action'] = '动态'; $lang->dataview->objects['effort'] = '日志'; +if($this->config->edition != 'open') $lang->dataview->objects['feedback'] = '反馈'; $lang->dataview->tables = array(); $lang->dataview->tables['build'] = array('name' => '版本数据', 'desc' => '包括版本名称、所属产品、所属项目、所属执行、创建人等'); diff --git a/module/dataview/table/feedback.php b/module/dataview/table/feedback.php new file mode 100644 index 0000000000..2bef823938 --- /dev/null +++ b/module/dataview/table/feedback.php @@ -0,0 +1,18 @@ +app->loadLang('feedback'); + +$schema = new stdclass(); + +$schema->primaryTable = 'feedback'; + +$schema->tables = array(); +$schema->tables['feedback'] = 'zt_feedback'; + +$schema->fields = array(); +$schema->fields['id'] = array('type' => 'number', 'name' => $this->lang->feedback->id); +$schema->fields['type'] = array('type' => 'option', 'name' => $this->lang->feedback->type, 'options' => $this->lang->feedback->typeList); +$schema->fields['status'] = array('type' => 'option', 'name' => $this->lang->feedback->status, 'options' => $this->lang->feedback->statusList); +$schema->fields['closedReason'] = array('type' => 'option', 'name' => $this->lang->feedback->closedReason, 'options' => $this->lang->feedback->closedReasonList); +$schema->fields['solution'] = array('type' => 'option', 'name' => $this->lang->feedback->solution, 'options' => $this->lang->feedback->solutionList); +$schema->fields['public'] = array('type' => 'option', 'name' => $this->lang->feedback->public, 'options' => $this->lang->feedback->publicList); + diff --git a/module/dataview/table/user.php b/module/dataview/table/user.php new file mode 100644 index 0000000000..c1bd324f4a --- /dev/null +++ b/module/dataview/table/user.php @@ -0,0 +1,18 @@ +app->loadLang('user'); +$this->app->loadLang('dept'); + +$schema = new stdclass(); + +$schema->primaryTable = 'user'; + +$schema->tables = array(); +$schema->tables['user'] = 'zt_user'; +$schema->tables['dept'] = 'zt_dept'; + +$schema->joins = array(); +$schema->joins['dept'] = 'dept.id = user.dept'; + +$schema->fields = array(); +$schema->fields['id'] = array('type' => 'number', 'name' => $this->lang->user->id); +$schema->fields['dept'] = array('type' => 'object', 'name' => $this->lang->user->dept, 'object' => 'dept', 'show' => 'dept.name'); diff --git a/module/design/config/dtable.php b/module/design/config/dtable.php index f9e6ef7f8b..cc6e3b32bf 100644 --- a/module/design/config/dtable.php +++ b/module/design/config/dtable.php @@ -26,7 +26,6 @@ $config->design->dtable->fieldList['type']['statusMap'] = $lang->design->typeLis $config->design->dtable->fieldList['type']['sortType'] = true; $config->design->dtable->fieldList['assignedTo']['type'] = 'assign'; -$config->design->dtable->fieldList['assignedTo']['currentUser'] = $app->user->account; $config->design->dtable->fieldList['assignedTo']['assignLink'] = array('module' => 'design', 'method' => 'assignTo', 'params' => 'designID={id}'); $config->design->dtable->fieldList['assignedTo']['data-toggle'] = 'modal'; $config->design->dtable->fieldList['assignedTo']['sortType'] = false; diff --git a/module/design/config/form.php b/module/design/config/form.php index b1acd11e7e..1ba880c4c4 100644 --- a/module/design/config/form.php +++ b/module/design/config/form.php @@ -12,7 +12,7 @@ $config->design->form->create['project'] = array('type' => 'int', 'requ $config->design->form->create['story'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->design->form->create['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); $config->design->form->create['version'] = array('type' => 'int', 'required' => false, 'default' => 1); -$config->design->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->design->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->design->form->create['createdDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->design->form->batchcreate['name'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim', 'base' => true); @@ -22,7 +22,7 @@ $config->design->form->batchcreate['project'] = array('type' => 'int', $config->design->form->batchcreate['story'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->design->form->batchcreate['desc'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->design->form->batchcreate['version'] = array('type' => 'int', 'required' => false, 'default' => 1); -$config->design->form->batchcreate['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->design->form->batchcreate['createdBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->design->form->batchcreate['createdDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->design->form->edit['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); @@ -30,10 +30,10 @@ $config->design->form->edit['type'] = array('type' => 'string', 'require $config->design->form->edit['product'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->design->form->edit['story'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->design->form->edit['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); -$config->design->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->design->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->design->form->edit['editedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->design->form->assignto['assignedTo'] = array('type' => 'string', 'required' => false, 'default' => ''); -$config->design->form->assignto['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->design->form->assignto['editedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->design->form->assignto['editedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->design->form->assignto['assignedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); diff --git a/module/design/control.php b/module/design/control.php index 23b7223940..f5e1dd04d8 100755 --- a/module/design/control.php +++ b/module/design/control.php @@ -138,6 +138,7 @@ class design extends control { $designData = form::data() ->add('project', $projectID) + ->setDefault('createdBy', $this->app->user->account) ->get(); $designID = $this->design->create($designData); @@ -247,7 +248,7 @@ class design extends control if($_POST) { - $designData = form::data()->get(); + $designData = form::data()->setDefault('editedBy', $this->app->user->account)->get(); $changes = $this->design->update($designID, $designData); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); @@ -482,7 +483,7 @@ class design extends control { if($_POST) { - $designData = form::data()->get(); + $designData = form::data()->setDefault('editedBy', $this->app->user->account)->get(); $changes = $this->design->assign($designID, $designData); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/design/model.php b/module/design/model.php index 0cb1ae1a04..1b189c5289 100755 --- a/module/design/model.php +++ b/module/design/model.php @@ -60,8 +60,9 @@ class designModel extends model $this->loadModel('action'); foreach($designs as $rowID => $design) { - $design->product = $productID; - $design->project = $projectID; + $design->product = $productID; + $design->project = $projectID; + $design->createdBy = $this->app->user->account; $this->dao->insert(TABLE_DESIGN)->data($design)->autoCheck()->batchCheck($this->config->design->batchcreate->requiredFields, 'notempty')->exec(); if(dao::isError()) diff --git a/module/doc/config/form.php b/module/doc/config/form.php index 414a49dc4b..6cb7229289 100644 --- a/module/doc/config/form.php +++ b/module/doc/config/form.php @@ -15,7 +15,7 @@ $config->doc->form->createlib['execution'] = array('type' => 'int', 'requir $config->doc->form->createlib['groups'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); $config->doc->form->createlib['users'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); $config->doc->form->createlib['vision'] = array('type' => 'string', 'required' => false, 'default' => $config->vision); -$config->doc->form->createlib['addedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->doc->form->createlib['addedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->doc->form->createlib['addedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->doc->form->editlib['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); @@ -35,9 +35,9 @@ $config->doc->form->create['type'] = array('type' => 'string', 'requir $config->doc->form->create['keywords'] = array('type' => 'string', 'required' => false, 'default' => '', 'skipRequired' => true); $config->doc->form->create['acl'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->doc->form->create['vision'] = array('type' => 'string', 'required' => false, 'default' => $config->vision); -$config->doc->form->create['addedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->doc->form->create['addedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->doc->form->create['addedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); -$config->doc->form->create['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->doc->form->create['editedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->doc->form->create['editedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->doc->form->create['groups'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); $config->doc->form->create['users'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); @@ -62,5 +62,5 @@ $config->doc->form->edit['content'] = array('type' => 'string', 'required' $config->doc->form->edit['groups'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); $config->doc->form->edit['users'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); $config->doc->form->edit['mailto'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); -$config->doc->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->doc->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->doc->form->edit['editedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); diff --git a/module/doc/control.php b/module/doc/control.php index 61b1afdd73..d2ec54b1f3 100755 --- a/module/doc/control.php +++ b/module/doc/control.php @@ -332,7 +332,11 @@ class doc extends control helper::setcookie('lastDocModule', $moduleID); if(!isset($_POST['lib']) && strpos($_POST['module'], '_') !== false) list($_POST['lib'], $_POST['module']) = explode('_', $_POST['module']); - $docData = form::data()->get(); + $docData = form::data() + ->setDefault('addedBy', $this->app->user->account) + ->setDefault('editedBy', $this->app->user->account) + ->get(); + $docResult = $this->doc->create($docData, $this->post->labels); if(!$docResult || dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); return $this->docZen->responseAfterCreate($docData->lib, $docResult); @@ -383,7 +387,10 @@ class doc extends control if($comment == false) { if(!isset($_POST['lib']) && strpos($_POST['module'], '_') !== false) list($_POST['lib'], $_POST['module']) = explode('_', $_POST['module']); - $docData = form::data()->setIF(strpos(",$doc->editedList,", ",{$this->app->user->account},") === false, 'editedList', $doc->editedList . ",{$this->app->user->account}")->get(); + $docData = form::data() + ->setDefault('editedBy', $this->app->user->account) + ->setIF(strpos(",$doc->editedList,", ",{$this->app->user->account},") === false, 'editedList', $doc->editedList . ",{$this->app->user->account}") + ->get(); $result = $this->doc->update($docID, $docData); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/doc/ui/create.html.php b/module/doc/ui/create.html.php index ac55f0be0a..f65371b2c8 100644 --- a/module/doc/ui/create.html.php +++ b/module/doc/ui/create.html.php @@ -88,6 +88,7 @@ else input ( set::name('title'), + set::maxlength(100), set::placeholder($lang->doc->titlePlaceholder) ) ), diff --git a/module/doc/ui/edit.html.php b/module/doc/ui/edit.html.php index bebee025bf..5dec9191ed 100644 --- a/module/doc/ui/edit.html.php +++ b/module/doc/ui/edit.html.php @@ -34,6 +34,7 @@ form ( set::name('title'), set::value($doc->title), + set::maxlength(100), set::placeholder($lang->doc->titlePlaceholder) ) ), diff --git a/module/doc/ui/view.html.php b/module/doc/ui/view.html.php index 66b2dc1a6a..1e485bb81c 100644 --- a/module/doc/ui/view.html.php +++ b/module/doc/ui/view.html.php @@ -253,6 +253,7 @@ $treeDom = isset($outlineTree) ? div setID('contentTree'), tree ( + set::className('pl-4'), set::items($outlineTree), set::defaultNestedShow(true) ) diff --git a/module/doc/zen.php b/module/doc/zen.php index 012613ccf9..bec7dec4d1 100644 --- a/module/doc/zen.php +++ b/module/doc/zen.php @@ -79,7 +79,7 @@ class docZen extends doc $item = array(); $item['id'] = $index; - $item['title'] = strip_tags($headElement[3]); + $item['title'] = array('html' => strip_tags($headElement[3])); $item['hint'] = strip_tags($headElement[3]); $item['url'] = '#anchor' . $index; $item['level'] = $currentLevel; @@ -271,6 +271,7 @@ class docZen extends doc { $this->lang->doc->name = $this->lang->doclib->name; $lib = form::data() + ->setDefault('addedBy', $this->app->user->account) ->setIF($this->post->type == 'product' && !empty($_POST['product']), 'product', $this->post->product) ->setIF($this->post->type == 'project' && !empty($_POST['project']), 'project', $this->post->project) ->setIF($this->post->libType != 'api' && !empty($_POST['execution']), 'execution', $this->post->execution) diff --git a/module/execution/control.php b/module/execution/control.php index 174b65c7b7..a0fdc5acdf 100644 --- a/module/execution/control.php +++ b/module/execution/control.php @@ -359,6 +359,7 @@ class execution extends control */ public function importBug(int $executionID = 0, string $browseType = 'all', int $param = 0, int $recTotal = 0, int $recPerPage = 30, int $pageID = 1) { + $this->session->set('bugList', $this->app->getURI(true), 'execution'); $execution = $this->execution->getByID($executionID); if(!empty($_POST)) { @@ -1968,9 +1969,9 @@ class execution extends control public function storyKanban(int $executionID) { $this->app->loadLang('kanban'); - $this->execution->setMenu($executionID); - $execution = $this->loadModel('execution')->getByID($executionID); - $stories = $this->loadModel('story')->getExecutionStories($executionID); + $execution = $this->commonAction($executionID); + $executionID = $execution->id; + $stories = $this->loadModel('story')->getExecutionStories($executionID); $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story', false); $stories = array_filter($stories, function($story) {return in_array($story->stage, $this->config->execution->storyKanbanCols);}); diff --git a/module/execution/js/taskkanban.ui.js b/module/execution/js/taskkanban.ui.js index 9e53ba453e..3f64df38e1 100644 --- a/module/execution/js/taskkanban.ui.js +++ b/module/execution/js/taskkanban.ui.js @@ -233,7 +233,7 @@ window.getItem = function(info) info.item.title = info.item.title.replaceAll(searchValue, "" + searchValue + ""); info.item.title = {html: info.item.title}; } - info.item.titleUrl = $.createLink(info.laneInfo.type, 'view', `id=${info.item.id}`); + info.item.titleUrl = info.laneInfo.type == 'story' ? $.createLink('execution', 'storyView', `id=${info.item.id}&executionID=${executionID}`) : $.createLink(info.laneInfo.type, 'view', `id=${info.item.id}`); info.item.titleAttrs = {'data-toggle': 'modal', 'data-size' : 'lg', 'title' : info.item.title}; info.item.content = {html: content}; diff --git a/module/execution/model.php b/module/execution/model.php index 81da973b67..7f68ea9ded 100755 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -1283,8 +1283,7 @@ class executionModel extends model /* Order by status's content whether or not done. */ $executions = $this->dao->select("*, IF(INSTR('done,closed', status) < 2, 0, 1) AS isDone, INSTR('doing,wait,suspended,closed', status) AS sortStatus")->from(TABLE_EXECUTION) - ->where('type')->ne('') - ->beginIF(strpos(',lite,or,', ",{$this->config->vision},") !== false)->andWhere('vision')->eq($this->config->vision)->fi() + ->where('vision')->eq($this->config->vision) ->beginIF((!$this->session->multiple && $this->app->tab == 'execution') || strpos($mode, 'multiple') !== false)->andWhere('multiple')->eq('1')->fi() ->beginIF($type != 'all')->andWhere('type')->in($type)->fi() ->beginIF($type == 'all')->andWhere('type')->in('stage,sprint,kanban')->fi() diff --git a/module/execution/tao.php b/module/execution/tao.php index 9e3683f2d1..3e05576f54 100644 --- a/module/execution/tao.php +++ b/module/execution/tao.php @@ -278,7 +278,7 @@ class executionTao extends executionModel $this->lang->execution->menu = new stdclass(); $this->lang->execution->menu->kanban = array('link' => "{$this->lang->kanban->common}|execution|kanban|executionID=%s", 'subModule' => 'task'); $this->lang->execution->menu->CFD = array('link' => "{$this->lang->execution->CFD}|execution|cfd|executionID=%s"); - $this->lang->execution->menu->build = array('link' => "{$this->lang->build->common}|execution|build|executionID=%s"); + $this->lang->execution->menu->build = array('link' => "{$this->lang->build->common}|execution|build|executionID=%s", 'alias' => 'bug,testcase,testtask', 'subModule' => 'projectbuild,build,testcase,testtask,bug'); $this->lang->execution->menu->settings = array('link' => "{$this->lang->settings}|execution|view|executionID=%s", 'subModule' => 'personnel', 'alias' => 'edit,manageproducts,team,whitelist,addwhitelist,managemembers', 'class' => 'dropdown dropdown-hover'); $this->lang->execution->dividerMenu = ''; diff --git a/module/execution/ui/build.html.php b/module/execution/ui/build.html.php index 1de6fa2943..daa3d34f87 100644 --- a/module/execution/ui/build.html.php +++ b/module/execution/ui/build.html.php @@ -44,7 +44,11 @@ jsVar('filePathTip', $lang->build->filePath); jsVar('confirmDelete', $lang->build->confirmDelete); $fieldList = $config->build->dtable->fieldList; -if($execution->type == 'kanban') unset($fieldList['actions']['actionsMap']['createTest']['data-app']); +if($execution->type == 'kanban') +{ + unset($fieldList['actions']['list']['createTest']['data-app']); + $fieldList['actions']['list']['viewBug']['url'] = $config->build->actionList['bugList']['url']; +} $builds = initTableData($builds, $fieldList, $this->build); dtable diff --git a/module/execution/ui/story.html.php b/module/execution/ui/story.html.php index c16113de86..a250065da1 100644 --- a/module/execution/ui/story.html.php +++ b/module/execution/ui/story.html.php @@ -103,13 +103,15 @@ $product ? toolbar setClass('text-primary font-bold shadow-inner bg-canvas'), set::icon('format-list-bulleted'), set::hint($lang->execution->list), - set::url(inlink('story', "executionID={$execution->id}&storyType={$storyType}&orderBy={$orderBy}&type=all")) + set::url(inlink('story', "executionID={$execution->id}&storyType={$storyType}&orderBy={$orderBy}&type=all")), + setData('app', $app->tab) ), btn ( set::icon('kanban'), set::hint($lang->execution->kanban), - set::url($this->createLink('execution', 'storykanban', "executionID={$execution->id}")) + set::url($this->createLink('execution', 'storykanban', "executionID={$execution->id}")), + setData('app', $app->tab) ), ) : null, hasPriv('story', 'report') ? item(set(array diff --git a/module/execution/ui/storykanban.html.php b/module/execution/ui/storykanban.html.php index e95a3244b2..e3aac8bbba 100644 --- a/module/execution/ui/storykanban.html.php +++ b/module/execution/ui/storykanban.html.php @@ -55,14 +55,16 @@ $product ? toolbar ( set::icon('format-list-bulleted'), set::hint($lang->execution->list), - set::url(inlink('story', "executionID={$execution->id}")) + set::url(inlink('story', "executionID={$execution->id}")), + setData('app', $app->tab) ), btn ( setClass('text-primary font-bold shadow-inner bg-canvas'), set::icon('kanban'), set::hint($lang->execution->kanban), - set::url($this->createLink('execution', 'storykanban', "executionID={$execution->id}")) + set::url($this->createLink('execution', 'storykanban', "executionID={$execution->id}")), + setData('app', $app->tab) ), ) : null, hasPriv('story', 'export') ? item(set(array diff --git a/module/file/control.php b/module/file/control.php index 99b65eb97b..d831c82ec9 100755 --- a/module/file/control.php +++ b/module/file/control.php @@ -184,7 +184,7 @@ class file extends control $output .= '"'; foreach($fields as $fieldName => $fieldLabel) { - $output .= isset($row->$fieldName) ? str_replace(array('"', ' '), array('“', ' '), htmlspecialchars_decode(strip_tags((string)$row->$fieldName, ''))) : ''; + $output .= isset($row->$fieldName) ? str_replace(array('"', ' '), array('“', ' '), htmlSpecialString(strip_tags((string)$row->$fieldName, ''))) : ''; $output .= '","'; } $output .= '"' . "\n"; @@ -218,7 +218,7 @@ class file extends control $output .= " \n"; foreach($fields as $fieldName => $fieldLabel) { - $fieldValue = isset($row->$fieldName) ? htmlSpecialString($row->$fieldName) : ''; + $fieldValue = isset($row->$fieldName) ? htmlSpecialString(strip_tags((string)$row->$fieldName, '')) : ''; $output .= " <$fieldName>$fieldValue\n"; } $output .= " \n"; diff --git a/module/git/model.php b/module/git/model.php index 7b508a81d1..4a3d393347 100644 --- a/module/git/model.php +++ b/module/git/model.php @@ -199,9 +199,9 @@ class gitModel extends model { $scm = strtolower($repo->SCM); $userList = $this->loadModel($scm)->apiGetUsers((int)$repo->serviceHost); - $acountIDPairs = $this->loadModel('pipeline')->getUserBindedPairs((int)$repo->serviceHost, $scm, 'openID,account'); + $accountIDPairs = $this->loadModel('pipeline')->getUserBindedPairs((int)$repo->serviceHost, $scm, 'openID,account'); - foreach($userList as $user) $accountPairs[$user->realname] = zget($acountIDPairs, $user->id, ''); + foreach($userList as $user) $accountPairs[$user->realname] = zget($accountIDPairs, $user->id, ''); } /* Update code commit history. */ diff --git a/module/gitea/config/form.php b/module/gitea/config/form.php index a483bae20a..b393ba0682 100644 --- a/module/gitea/config/form.php +++ b/module/gitea/config/form.php @@ -1,5 +1,4 @@ gitea->form = new stdclass(); $config->gitea->form->create = array(); $config->gitea->form->create['appType'] = array('type' => 'string', 'required' => true, 'default' => 'gitea'); @@ -7,7 +6,6 @@ $config->gitea->form->create['type'] = array('type' => 'string', 'require $config->gitea->form->create['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitea->form->create['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitea->form->create['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gitea->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gitea->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->gitea->form->create['private'] = array('type' => 'string', 'required' => false, 'default' => uniqid()); @@ -15,5 +13,4 @@ $config->gitea->form->edit = array(); $config->gitea->form->edit['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitea->form->edit['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitea->form->edit['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gitea->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gitea->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); diff --git a/module/gitea/control.php b/module/gitea/control.php index 3f776c306a..db855f70a3 100644 --- a/module/gitea/control.php +++ b/module/gitea/control.php @@ -71,7 +71,9 @@ class gitea extends control { if($_POST) { - $gitea = form::data($this->config->gitea->form->create)->get(); + $gitea = form::data($this->config->gitea->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); $result = $this->checkToken($gitea); if(is_array($result)) return $this->send($result); @@ -118,7 +120,9 @@ class gitea extends control if($_POST) { - $gitea = form::data($this->config->gitea->form->edit)->get(); + $gitea = form::data($this->config->gitea->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); $result = $this->checkToken($gitea); if(is_array($result)) return $this->send($result); diff --git a/module/gitfox/config/form.php b/module/gitfox/config/form.php index 111cbd4f88..3509d2d3ba 100644 --- a/module/gitfox/config/form.php +++ b/module/gitfox/config/form.php @@ -1,5 +1,4 @@ gitfox->form = new stdclass(); $config->gitfox->form->create = array(); $config->gitfox->form->create['appType'] = array('type' => 'string', 'required' => true, 'default' => 'gitfox'); @@ -7,7 +6,6 @@ $config->gitfox->form->create['type'] = array('type' => 'string', 'requ $config->gitfox->form->create['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitfox->form->create['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitfox->form->create['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gitfox->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gitfox->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->gitfox->form->create['private'] = array('type' => 'string', 'required' => false, 'default' => uniqid()); @@ -15,5 +13,4 @@ $config->gitfox->form->edit = array(); $config->gitfox->form->edit['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitfox->form->edit['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitfox->form->edit['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gitfox->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gitfox->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); diff --git a/module/gitfox/control.php b/module/gitfox/control.php index f0e4efc6da..c1c17bd39c 100644 --- a/module/gitfox/control.php +++ b/module/gitfox/control.php @@ -22,7 +22,9 @@ class gitfox extends control { if($_POST) { - $gitfox = form::data($this->config->gitfox->form->create)->get(); + $gitfox = form::data($this->config->gitfox->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); $this->checkToken($gitfox); $gitfoxID = $this->loadModel('pipeline')->create($gitfox); @@ -51,7 +53,9 @@ class gitfox extends control if($_POST) { - $gitfox = form::data($this->config->gitfox->form->edit)->get(); + $gitfox = form::data($this->config->gitfox->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); $this->checkToken($gitfox, $gitfoxID); $this->loadModel('pipeline')->update($gitfoxID, $gitfox); $gitFox = $this->gitfox->fetchByID($gitfoxID); diff --git a/module/gitlab/config/form.php b/module/gitlab/config/form.php index 5a1069e123..7066b3415c 100644 --- a/module/gitlab/config/form.php +++ b/module/gitlab/config/form.php @@ -1,5 +1,4 @@ gitlab->form = new stdclass(); $config->gitlab->form->create = array(); $config->gitlab->form->create['appType'] = array('type' => 'string', 'required' => true, 'default' => 'gitlab'); @@ -7,7 +6,6 @@ $config->gitlab->form->create['type'] = array('type' => 'string', 'requ $config->gitlab->form->create['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitlab->form->create['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitlab->form->create['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gitlab->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gitlab->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->gitlab->form->create['private'] = array('type' => 'string', 'required' => false, 'default' => uniqid()); @@ -15,7 +13,6 @@ $config->gitlab->form->edit = array(); $config->gitlab->form->edit['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitlab->form->edit['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gitlab->form->edit['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gitlab->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gitlab->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->gitlab->form->user = new stdclass(); diff --git a/module/gitlab/control.php b/module/gitlab/control.php index c8fd774cfb..38c7470b6b 100644 --- a/module/gitlab/control.php +++ b/module/gitlab/control.php @@ -75,7 +75,9 @@ class gitlab extends control { if($_POST) { - $gitlab = form::data($this->config->gitlab->form->create)->get(); + $gitlab = form::data($this->config->gitlab->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); $this->checkToken($gitlab); $gitlabID = $this->loadModel('pipeline')->create($gitlab); @@ -123,7 +125,9 @@ class gitlab extends control if($_POST) { - $gitlab = form::data($this->config->gitlab->form->edit)->get(); + $gitlab = form::data($this->config->gitlab->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); $this->checkToken($gitlab, $gitlabID); $this->loadModel('pipeline')->update($gitlabID, $gitlab); $gitLab = $this->gitlab->getByID($gitlabID); diff --git a/module/gitlab/model.php b/module/gitlab/model.php index 9ce1d89118..9f3abe8f17 100644 --- a/module/gitlab/model.php +++ b/module/gitlab/model.php @@ -2332,18 +2332,18 @@ class gitlabModel extends model * @param int $projectID * @param int $repoID * @access public - * @return bool + * @return string */ - public function updateCodePath(int $gitlabID, int $projectID, int $repoID): bool + public function updateCodePath(int $gitlabID, int $projectID, int $repoID): string { $project = $this->apiGetSingleProject($gitlabID, $projectID); if(is_object($project) and !empty($project->web_url)) { $this->dao->update(TABLE_REPO)->set('path')->eq($project->web_url)->where('id')->eq($repoID)->exec(); - return true; + return $project->web_url; } - return false; + return ''; } /** @@ -2417,6 +2417,7 @@ class gitlabModel extends model if(!$gitlab) return array(); /* Compatible with HTTP and HTTPS domain. */ + if(strpos($repo->codePath, '/api/v4/projects')) $repo->codePath = $this->updateCodePath((int)$repo->serviceHost, (int)$repo->serviceProject, $repo->id); $repo->client = str_replace('https://', 'http://', $repo->client); $repo->codePath = str_replace('https://', 'http://', $repo->codePath); diff --git a/module/gogs/config/form.php b/module/gogs/config/form.php index 25e8916ee0..d5fad89867 100644 --- a/module/gogs/config/form.php +++ b/module/gogs/config/form.php @@ -1,5 +1,4 @@ gogs->form = new stdclass(); $config->gogs->form->create = array(); $config->gogs->form->create['appType'] = array('type' => 'string', 'required' => true, 'default' => 'gogs'); @@ -7,7 +6,6 @@ $config->gogs->form->create['type'] = array('type' => 'string', 'requir $config->gogs->form->create['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gogs->form->create['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gogs->form->create['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gogs->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gogs->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->gogs->form->create['private'] = array('type' => 'string', 'required' => false, 'default' => uniqid()); @@ -15,5 +13,4 @@ $config->gogs->form->edit = array(); $config->gogs->form->edit['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gogs->form->edit['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->gogs->form->edit['token'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->gogs->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->gogs->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); diff --git a/module/gogs/control.php b/module/gogs/control.php index e06622011b..6c5e95c437 100644 --- a/module/gogs/control.php +++ b/module/gogs/control.php @@ -70,7 +70,9 @@ class gogs extends control { if($_POST) { - $gogs = form::data($this->config->gogs->form->create)->get(); + $gogs = form::data($this->config->gogs->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); $priv = $this->checkToken($gogs); if(is_array($priv)) return $this->send($priv); @@ -118,7 +120,9 @@ class gogs extends control if($_POST) { - $gogs = form::data($this->config->gogs->form->edit)->get(); + $gogs = form::data($this->config->gogs->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); $this->checkToken($gogs); $this->loadModel('pipeline')->update($gogsID, $gogs); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/group/lang/de.php b/module/group/lang/de.php index f32d2683ad..491c62d393 100644 --- a/module/group/lang/de.php +++ b/module/group/lang/de.php @@ -315,6 +315,7 @@ $lang->group->package->lieu = 'Lieu'; $lang->group->package->holiday = 'Holiday'; $lang->group->package->exportOffice = 'Export Office'; $lang->group->package->browseFeedback = 'Browse Feedback'; +$lang->group->package->browseLiteFeedback = $lang->group->package->browseFeedback; $lang->group->package->manageFeedback = 'Manage Feedback'; $lang->group->package->importFeedback = 'Import Feedback'; $lang->group->package->handleFeedback = 'Handle Feedback'; diff --git a/module/group/lang/en.php b/module/group/lang/en.php index ea357ed1a1..7878db6f51 100644 --- a/module/group/lang/en.php +++ b/module/group/lang/en.php @@ -315,6 +315,7 @@ $lang->group->package->lieu = 'Lieu'; $lang->group->package->holiday = 'Holiday'; $lang->group->package->exportOffice = 'Export Office'; $lang->group->package->browseFeedback = 'Browse Feedback'; +$lang->group->package->browseLiteFeedback = $lang->group->package->browseFeedback; $lang->group->package->manageFeedback = 'Manage Feedback'; $lang->group->package->importFeedback = 'Import Feedback'; $lang->group->package->handleFeedback = 'Handle Feedback'; diff --git a/module/group/lang/fr.php b/module/group/lang/fr.php index 6678bd154e..70fcd36088 100644 --- a/module/group/lang/fr.php +++ b/module/group/lang/fr.php @@ -315,6 +315,7 @@ $lang->group->package->lieu = 'Lieu'; $lang->group->package->holiday = 'Holiday'; $lang->group->package->exportOffice = 'Export Office'; $lang->group->package->browseFeedback = 'Browse Feedback'; +$lang->group->package->browseLiteFeedback = $lang->group->package->browseFeedback; $lang->group->package->manageFeedback = 'Manage Feedback'; $lang->group->package->importFeedback = 'Import Feedback'; $lang->group->package->handleFeedback = 'Handle Feedback'; diff --git a/module/group/lang/zh-cn.php b/module/group/lang/zh-cn.php index 0532aea15e..b3a37b3f3e 100644 --- a/module/group/lang/zh-cn.php +++ b/module/group/lang/zh-cn.php @@ -315,6 +315,7 @@ $lang->group->package->lieu = '个人调休'; $lang->group->package->holiday = '节假日'; $lang->group->package->exportOffice = '办公导出'; $lang->group->package->browseFeedback = '浏览反馈'; +$lang->group->package->browseLiteFeedback = $lang->group->package->browseFeedback; $lang->group->package->manageFeedback = '创建维护反馈'; $lang->group->package->importFeedback = '导入导出反馈'; $lang->group->package->handleFeedback = '处理反馈'; diff --git a/module/group/model.php b/module/group/model.php index e1ea4f5a4d..0678ecdd45 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -867,7 +867,7 @@ class groupModel extends model if(isset($privs[$dependPriv]) || in_array($dependPriv, $excludes)) continue; $privs[$dependPriv] = $dependPriv; - $dependPrivs = $this->processDepends($depends, $depends[$dependPriv], $excludes, $processedPrivs); + $dependPrivs = $this->processDepends($depends, zget($depends, $dependPriv, array()), $excludes, $processedPrivs); foreach($dependPrivs as $depend) { diff --git a/module/group/packagemanager.php b/module/group/packagemanager.php index fe4929082c..4c090e8c80 100644 --- a/module/group/packagemanager.php +++ b/module/group/packagemanager.php @@ -493,6 +493,20 @@ $config->group->subset->artifactrepo = new stdclass(); $config->group->subset->artifactrepo->order = 2760; $config->group->subset->artifactrepo->nav = 'devops'; +$config->group->subset->market = new stdclass(); +$config->group->subset->market->nav = 'market'; + +$config->group->subset->marketreport = new stdclass(); +$config->group->subset->marketreport->nav = 'market'; + +$config->group->subset->marketresearch = new stdclass(); +$config->group->subset->marketresearch->nav = 'market'; + +$config->group->subset->researchstage = new stdclass(); +$config->group->subset->researchstage->nav = 'market'; + +$config->group->subset->researchtask = new stdclass(); +$config->group->subset->researchtask->nav = 'market'; $config->group->subset->other = new stdclass(); $config->group->subset->other->order = 100000; @@ -1499,6 +1513,13 @@ $config->group->package->browseFeedback->privs = array(); $config->group->package->browseFeedback->privs['feedback-adminView'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 25, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-create', 'feedback-edit')); $config->group->package->browseFeedback->privs['feedback-admin'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 30, 'depend' => array(), 'recommend' => array('feedback-adminView')); +$config->group->package->browseLiteFeedback = new stdclass(); +$config->group->package->browseLiteFeedback->order = 5; +$config->group->package->browseLiteFeedback->subset = 'feedback'; +$config->group->package->browseLiteFeedback->privs = array(); +$config->group->package->browseLiteFeedback->privs['feedback-view'] = array('edition' => 'biz,max,ipd', 'vision' => 'lite', 'order' => 25, 'depend' => array('feedback-browse'), 'recommend' => array('feedback-create', 'feedback-edit')); +$config->group->package->browseLiteFeedback->privs['feedback-browse'] = array('edition' => 'biz,max,ipd', 'vision' => 'lite', 'order' => 30, 'depend' => array(), 'recommend' => array('feedback-view')); + $config->group->package->manageFeedback = new stdclass(); $config->group->package->manageFeedback->order = 10; $config->group->package->manageFeedback->subset = 'feedback'; @@ -1526,18 +1547,18 @@ $config->group->package->handleFeedback = new stdclass(); $config->group->package->handleFeedback->order = 20; $config->group->package->handleFeedback->subset = 'feedback'; $config->group->package->handleFeedback->privs = array(); -$config->group->package->handleFeedback->privs['feedback-editOthers'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 10, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-edit')); +$config->group->package->handleFeedback->privs['feedback-editOthers'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 10, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-edit')); $config->group->package->handleFeedback->privs['feedback-toTask'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 5, 'depend' => array('feedback-admin', 'task-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toBug', 'feedback-toStory', 'feedback-toTicket', 'feedback-toTodo', 'feedback-toUserStory')); $config->group->package->handleFeedback->privs['feedback-toTodo'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 7, 'depend' => array('feedback-admin', 'todo-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toBug', 'feedback-toStory', 'feedback-toTask', 'feedback-toTicket', 'feedback-toUserStory')); $config->group->package->handleFeedback->privs['feedback-toBug'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 6, 'depend' => array('feedback-admin', 'bug-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toStory', 'feedback-toTask', 'feedback-toTicket', 'feedback-toTodo', 'feedback-toUserStory')); $config->group->package->handleFeedback->privs['feedback-toStory'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 3, 'depend' => array('feedback-admin', 'story-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toBug', 'feedback-toTask', 'feedback-toTicket', 'feedback-toTodo', 'feedback-toUserStory')); $config->group->package->handleFeedback->privs['feedback-toTicket'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 8, 'depend' => array('feedback-admin', 'ticket-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toBug', 'feedback-toStory', 'feedback-toTask', 'feedback-toTodo', 'feedback-toUserStory')); $config->group->package->handleFeedback->privs['feedback-toUserStory'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 4, 'depend' => array('feedback-admin', 'requirement-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toBug', 'feedback-toStory', 'feedback-toTask', 'feedback-toTicket', 'feedback-toTodo')); -$config->group->package->handleFeedback->privs['feedback-toDemand'] = array('edition' => 'biz,max,ipd', 'vision' => 'or', 'order' => 4, 'depend' => array('feedback-admin', 'demand-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toBug', 'feedback-toStory', 'feedback-toTask', 'feedback-toTicket', 'feedback-toTodo')); +$config->group->package->handleFeedback->privs['feedback-toDemand'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 4, 'depend' => array('feedback-admin', 'demand-create'), 'recommend' => array('feedback-reply', 'feedback-review', 'feedback-toBug', 'feedback-toStory', 'feedback-toTask', 'feedback-toTicket', 'feedback-toTodo')); $config->group->package->handleFeedback->privs['feedback-review'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 0, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-batchReview', 'feedback-reply', 'feedback-toBug', 'feedback-toStory', 'feedback-toTask', 'feedback-toTicket', 'feedback-toTodo', 'feedback-toUserStory')); $config->group->package->handleFeedback->privs['feedback-reply'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 2, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-review', 'feedback-toBug', 'feedback-toStory', 'feedback-toTask', 'feedback-toTicket', 'feedback-toTodo', 'feedback-toUserStory')); $config->group->package->handleFeedback->privs['feedback-batchReview'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 1, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-review')); -$config->group->package->handleFeedback->privs['feedback-syncProduct'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 9, 'depend' => array('feedback-admin'), 'recommend' => array()); +$config->group->package->handleFeedback->privs['feedback-syncProduct'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or', 'order' => 9, 'depend' => array('feedback-admin'), 'recommend' => array()); $config->group->package->faq = new stdclass(); $config->group->package->faq->order = 5; @@ -1587,7 +1608,7 @@ $config->group->package->deleteFeedback = new stdclass(); $config->group->package->deleteFeedback->order = 25; $config->group->package->deleteFeedback->subset = 'feedback'; $config->group->package->deleteFeedback->privs = array(); -$config->group->package->deleteFeedback->privs['feedback-delete'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 95, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-create', 'feedback-edit')); +$config->group->package->deleteFeedback->privs['feedback-delete'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd,or,lite', 'order' => 95, 'depend' => array('feedback-admin'), 'recommend' => array('feedback-create', 'feedback-edit')); $config->group->package->deleteTIcket = new stdclass(); $config->group->package->deleteTIcket->order = 25; @@ -1817,6 +1838,8 @@ $config->group->package->manageCase->privs['testcase-confirmLibcaseChange'] = $config->group->package->manageCase->privs['testcase-ignoreLibcaseChange'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 15, 'depend' => array('testcase-view'), 'recommend' => array('testcase-confirmChange', 'testcase-confirmLibcaseChange', 'testcase-confirmStoryChange', 'testcase-create', 'testcase-edit')); $config->group->package->manageCase->privs['testcase-submit'] = array('edition' => 'max,ipd', 'vision' => 'rnd', 'order' => 4, 'depend' => array('testcase-view'), 'recommend' => array('testcase-confirmChange', 'testcase-confirmLibcaseChange', 'testcase-confirmStoryChange', 'testcase-create', 'testcase-edit', 'testcase-ignoreLibcaseChange', 'testcase-linkBugs', 'testcase-linkCases')); $config->group->package->manageCase->privs['testcase-updateOrder'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 30, 'depend' => array(), 'recommend' => array()); +$config->group->package->manageCase->privs['testcase-confirmdemandretract'] = array('edition' => 'ipd', 'vision' => 'rnd,or', 'order' => 30, 'depend' => array(), 'recommend' => array()); +$config->group->package->manageCase->privs['testcase-confirmdemandunlink'] = array('edition' => 'ipd', 'vision' => 'rnd,or', 'order' => 30, 'depend' => array(), 'recommend' => array()); $config->group->package->importCase = new stdclass(); $config->group->package->importCase->order = 25; @@ -2007,7 +2030,7 @@ $config->group->package->companyTeam->privs['user-todo'] = array('edit $config->group->package->companyTeam->privs['user-task'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 5, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-bug', 'user-dynamic', 'user-effort', 'user-execution', 'user-issue', 'user-profile', 'user-risk', 'user-story', 'user-testCase', 'user-testTask')); $config->group->package->companyTeam->privs['user-bug'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 7, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-dynamic', 'user-effort', 'user-execution', 'user-issue', 'user-profile', 'user-risk', 'user-story', 'user-task', 'user-testCase', 'user-testTask')); $config->group->package->companyTeam->privs['user-dynamic'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 13, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-bug', 'user-effort', 'user-execution', 'user-issue', 'user-profile', 'user-risk', 'user-story', 'user-task', 'user-testCase', 'user-testTask')); -$config->group->package->companyTeam->privs['user-profile'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 14, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-bug', 'user-dynamic', 'user-effort', 'user-execution', 'user-issue', 'user-risk', 'user-story', 'user-task', 'user-testCase', 'user-testTask')); +$config->group->package->companyTeam->privs['user-profile'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite,or', 'order' => 14, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-bug', 'user-dynamic', 'user-effort', 'user-execution', 'user-issue', 'user-risk', 'user-story', 'user-task', 'user-testCase', 'user-testTask')); $config->group->package->companyTeam->privs['user-story'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd,lite', 'order' => 6, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-bug', 'user-dynamic', 'user-effort', 'user-execution', 'user-issue', 'user-profile', 'user-risk', 'user-task', 'user-testCase', 'user-testTask')); $config->group->package->companyTeam->privs['user-testTask'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 8, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-bug', 'user-dynamic', 'user-effort', 'user-execution', 'user-issue', 'user-profile', 'user-risk', 'user-story', 'user-task', 'user-testCase')); $config->group->package->companyTeam->privs['user-testCase'] = array('edition' => 'open,biz,max,ipd', 'vision' => 'rnd', 'order' => 9, 'depend' => array('my-team', 'user-todo'), 'recommend' => array('user-bug', 'user-dynamic', 'user-effort', 'user-execution', 'user-issue', 'user-profile', 'user-risk', 'user-story', 'user-task', 'user-testTask')); @@ -3597,6 +3620,7 @@ $config->group->package->browseDemandPool->order = 5; $config->group->package->browseDemandPool->subset = 'demandpool'; $config->group->package->browseDemandPool->privs = array(); $config->group->package->browseDemandPool->privs['demandpool-browse'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array(), 'recommend' => array('demandpool-edit', 'demandpool-view')); +$config->group->package->browseDemandPool->privs['demandpool-track'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 20, 'depend' => array(), 'recommend' => array()); $config->group->package->browseDemandPool->privs['demandpool-view'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 40, 'depend' => array('demandpool-browse'), 'recommend' => array('demandpool-activate', 'demandpool-close', 'demandpool-delete', 'demandpool-edit')); $config->group->package->browseCharter = new stdclass(); @@ -3653,6 +3677,7 @@ $config->group->package->manageDemand->privs['demand-manageTree'] = array('edit $config->group->package->manageDemand->privs['demand-close'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 180, 'depend' => array('demand-browse', 'demand-view'), 'recommend' => array('demand-activate', 'demand-assignTo', 'demand-batchCreate', 'demand-create', 'demand-edit')); $config->group->package->manageDemand->privs['demand-activate'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 190, 'depend' => array('demand-browse', 'demand-view'), 'recommend' => array('demand-assignTo', 'demand-batchCreate', 'demand-close', 'demand-create', 'demand-edit')); $config->group->package->manageDemand->privs['demand-distribute'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 200, 'depend' => array('demand-browse', 'demand-view'), 'recommend' => array('demand-assignTo', 'demand-batchCreate', 'demand-create', 'demand-edit')); +$config->group->package->manageDemand->privs['demand-retract'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 210, 'depend' => array('demandpool-browse', 'demand-browse', 'demand-view'), 'recommend' => array('demand-distribute')); $config->group->package->reviewDemand = new stdclass(); $config->group->package->reviewDemand->order = 5; @@ -3968,3 +3993,122 @@ $config->group->package->trainPracticeLib->privs['traincourse-practice'] = $config->group->package->trainPracticeLib->privs['traincourse-practiceBrowse'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 10, 'depend' => array('traincourse-practice'), 'recommend' => array('traincourse-practiceView')); $config->group->package->trainPracticeLib->privs['traincourse-practiceView'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 15, 'depend' => array('traincourse-practice', 'traincourse-practiceBrowse'), 'recommend' => array()); $config->group->package->trainPracticeLib->privs['traincourse-updatePractice'] = array('edition' => 'biz,max,ipd', 'vision' => 'rnd', 'order' => 20, 'depend' => array('traincourse-practice', 'traincourse-practiceBrowse'), 'recommend' => array('traincourse-practiceView')); + +$config->group->package->browseMarket = new stdclass(); +$config->group->package->browseMarket->subset = 'market'; +$config->group->package->browseMarket->privs = array(); +$config->group->package->browseMarket->privs['market-browse'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array(), 'recommend' => array('market-view')); +$config->group->package->browseMarket->privs['market-view'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('market-browse'), 'recommend' => array()); + +$config->group->package->manageMarket = new stdclass(); +$config->group->package->manageMarket->subset = 'market'; +$config->group->package->manageMarket->privs = array(); +$config->group->package->manageMarket->privs['market-create'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('market-browse'), 'recommend' => array('market-view')); +$config->group->package->manageMarket->privs['market-edit'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('market-browse', 'market-view'), 'recommend' => array()); + +$config->group->package->deleteMarket = new stdclass(); +$config->group->package->deleteMarket->subset = 'market'; +$config->group->package->deleteMarket->privs = array(); +$config->group->package->deleteMarket->privs['market-delete'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('market-browse', 'market-view'), 'recommend' => array('market-create', 'market-edit')); + +$config->group->package->deleteMarket = new stdclass(); +$config->group->package->deleteMarket->subset = 'market'; +$config->group->package->deleteMarket->privs = array(); +$config->group->package->deleteMarket->privs['market-delete'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('market-browse', 'market-view'), 'recommend' => array('market-create', 'market-edit')); + +$config->group->package->browseReport = new stdclass(); +$config->group->package->browseReport->subset = 'marketreport'; +$config->group->package->browseReport->privs = array(); +$config->group->package->browseReport->privs['marketreport-all'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array(), 'recommend' => array('market-view')); +$config->group->package->browseReport->privs['marketreport-browse'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array(), 'recommend' => array('market-view')); +$config->group->package->browseReport->privs['marketreport-view'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 15, 'depend' => array('marketreport-browse'), 'recommend' => array()); + +$config->group->package->manageReport = new stdclass(); +$config->group->package->manageReport->subset = 'marketreport'; +$config->group->package->manageReport->privs = array(); +$config->group->package->manageReport->privs['marketreport-create'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketreport-all', 'marketreport-browse', 'marketreport-publish'), 'recommend' => array('marketreport-view')); +$config->group->package->manageReport->privs['marketreport-edit'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('marketreport-all', 'marketreport-browse', 'marketreport-publish'), 'recommend' => array('marketreport-view')); +$config->group->package->manageReport->privs['marketreport-publish'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 15, 'depend' => array('marketreport-all', 'marketreport-browse'), 'recommend' => array('marketreport-view')); + +$config->group->package->deleteReport = new stdclass(); +$config->group->package->deleteReport->subset = 'marketreport'; +$config->group->package->deleteReport->privs = array(); +$config->group->package->deleteReport->privs['marketreport-delete'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketreport-all', 'marketreport-browse', 'marketreport-publish'), 'recommend' => array('marketreport-create', 'marketreport-edit')); + +$config->group->package->browseResearch = new stdclass(); +$config->group->package->browseResearch->subset = 'marketresearch'; +$config->group->package->browseResearch->privs = array(); +$config->group->package->browseResearch->privs['marketresearch-all'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array(), 'recommend' => array('marketresearch-view')); +$config->group->package->browseResearch->privs['marketresearch-browse'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array(), 'recommend' => array('marketresearch-view')); +$config->group->package->browseResearch->privs['marketresearch-view'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 15, 'depend' => array(), 'recommend' => array('marketresearch-all', 'marketresearch-browse')); + +$config->group->package->manageResearch = new stdclass(); +$config->group->package->manageResearch->subset = 'marketresearch'; +$config->group->package->manageResearch->privs = array(); +$config->group->package->manageResearch->privs['marketresearch-create'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); +$config->group->package->manageResearch->privs['marketresearch-edit'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('marketresearch-all', 'marketresearch-browse', 'marketresearch-view'), 'recommend' => array()); +$config->group->package->manageResearch->privs['marketresearch-activate'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 15, 'depend' => array('marketresearch-all', 'marketresearch-browse', 'marketresearch-view'), 'recommend' => array()); +$config->group->package->manageResearch->privs['marketresearch-start'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 20, 'depend' => array('marketresearch-all', 'marketresearch-browse', 'marketresearch-view'), 'recommend' => array()); +$config->group->package->manageResearch->privs['marketresearch-close'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 25, 'depend' => array('marketresearch-all', 'marketresearch-browse', 'marketresearch-view'), 'recommend' => array()); + +$config->group->package->researchTeam = new stdclass(); +$config->group->package->researchTeam->subset = 'marketresearch'; +$config->group->package->researchTeam->privs = array(); +$config->group->package->researchTeam->privs['marketresearch-manageMembers'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-all', 'marketresearch-browse', 'marketresearch-view'), 'recommend' => array()); +$config->group->package->researchTeam->privs['marketresearch-unlinkMember'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('marketresearch-all', 'marketresearch-browse', 'marketresearch-view', 'marketresearch-manageMembers'), 'recommend' => array()); +$config->group->package->researchTeam->privs['marketresearch-team'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 15, 'depend' => array('marketresearch-all', 'marketresearch-browse'), 'recommend' => array('marketresearch-view')); + +$config->group->package->marketResearchReport = new stdclass(); +$config->group->package->marketResearchReport->subset = 'marketresearch'; +$config->group->package->marketResearchReport->privs = array(); +$config->group->package->marketResearchReport->privs['marketresearch-reports'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketreport-browse', 'marketreport-create', 'marketreport-all', 'marketresearch-browse', 'marketreport-view'), 'recommend' => array()); + +$config->group->package->deleteResearch = new stdclass(); +$config->group->package->deleteResearch->subset = 'marketresearch'; +$config->group->package->deleteResearch->privs = array(); +$config->group->package->deleteResearch->privs['marketresearch-delete'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-all', 'marketresearch-browse', 'marketresearch-view'), 'recommend' => array('marketresearch-create', 'marketresearch-edit')); + +$config->group->package->browseResearchStage = new stdclass(); +$config->group->package->browseResearchStage->subset = 'researchstage'; +$config->group->package->browseResearchStage->privs = array(); +$config->group->package->browseResearchStage->privs['marketresearch-stage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-all', 'marketresearch-browse'), 'recommend' => array('marketresearch-view')); + +$config->group->package->manageResearchStage = new stdclass(); +$config->group->package->manageResearchStage->subset = 'researchstage'; +$config->group->package->manageResearchStage->privs = array(); +$config->group->package->manageResearchStage->privs['marketresearch-createStage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array('marketresearch-view')); +$config->group->package->manageResearchStage->privs['marketresearch-editStage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); +$config->group->package->manageResearchStage->privs['marketresearch-batchStage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 15, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); +$config->group->package->manageResearchStage->privs['marketresearch-startStage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 20, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); +$config->group->package->manageResearchStage->privs['marketresearch-closeStage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 25, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); +$config->group->package->manageResearchStage->privs['marketresearch-activateStage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 30, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); + +$config->group->package->deleteResearchStage = new stdclass(); +$config->group->package->deleteResearchStage->subset = 'researchstage'; +$config->group->package->deleteResearchStage->privs = array(); +$config->group->package->deleteResearchStage->privs['marketresearch-deleteStage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); + +$config->group->package->browseResearchTask = new stdclass(); +$config->group->package->browseResearchTask->subset = 'researchtask'; +$config->group->package->browseResearchTask->privs = array(); +$config->group->package->browseResearchTask->privs['marketresearch-stage'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-all', 'marketresearch-browse'), 'recommend' => array('marketresearch-viewTask')); +$config->group->package->browseResearchTask->privs['marketresearch-viewTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse'), 'recommend' => array()); + +$config->group->package->manageResearchTask = new stdclass(); +$config->group->package->manageResearchTask->subset = 'researchtask'; +$config->group->package->manageResearchTask->privs = array(); +$config->group->package->manageResearchTask->privs['marketresearch-createTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-activateTask', 'marketresearch-closeTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-batchCreateTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 10, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-activateTask', 'marketresearch-closeTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-editTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 15, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-activateTask', 'marketresearch-closeTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-taskAssignTo'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 20, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-activateTask', 'marketresearch-closeTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-startTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 25, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-finishTask', 'marketresearch-activateTask', 'marketresearch-closeTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-recordTaskEstimate'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 30, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-activateTask', 'marketresearch-closeTask', 'marketresearch-cancelTask')); +$config->group->package->manageResearchTask->privs['marketresearch-finishTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 35, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-activateTask', 'marketresearch-closeTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-activateTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 40, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-closeTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-closeTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 45, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-activateTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); +$config->group->package->manageResearchTask->privs['marketresearch-cancelTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 50, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-closeTask', 'marketresearch-activateTask', 'marketresearch-recordTaskEstimate')); + +$config->group->package->deleteResearchTask = new stdclass(); +$config->group->package->deleteResearchTask->subset = 'researchtask'; +$config->group->package->deleteResearchTask->privs = array(); +$config->group->package->deleteResearchTask->privs['marketresearch-deleteTask'] = array('edition' => 'ipd', 'vision' => 'or', 'order' => 5, 'depend' => array('marketresearch-stage', 'marketresearch-all', 'marketresearch-browse', 'marketresearch-viewTask'), 'recommend' => array('marketresearch-createTask', 'marketresearch-batchCreateTask', 'marketresearch-taskAssignTo', 'marketresearch-editTask', 'marketresearch-startTask', 'marketresearch-finishTask', 'marketresearch-closeTask', 'marketresearch-activateTask', 'marketresearch-cancelTask', 'marketresearch-recordTaskEstimate')); diff --git a/module/index/js/index.ui.js b/module/index/js/index.ui.js index b067671e37..bf7664d88e 100644 --- a/module/index/js/index.ui.js +++ b/module/index/js/index.ui.js @@ -667,8 +667,8 @@ function initAppsMenu(items) icon: 'icon-search', methodName: 'index', moduleName: 'search', - text: lang.search, - title: ' ' + lang.search, + text: langData.search, + title: ' ' + langData.search, url: '/index.php?m=search&f=index', vars: '' }; @@ -766,11 +766,11 @@ $(document).on('click', '.open-in-app,.show-in-app', function(e) if(!code) return; const app = apps.openedMap[code]; - const items = [{text: lang.open, disabled: app && getLastAppCode() === code, onClick: function(){showApp(code)}}]; + const items = [{text: langData.open, disabled: app && getLastAppCode() === code, onClick: function(){showApp(code)}}]; if(app) { - items.push({text: lang.reload, onClick: function(){reloadApp(code)}}); - if(code !== 'my') items.push({text: lang.close, onClick: function(){closeApp(code)}}); + items.push({text: langData.reload, onClick: function(){reloadApp(code)}}); + if(code !== 'my') items.push({text: langData.close, onClick: function(){closeApp(code)}}); } zui.ContextMenu.show({hideOthers: true, element: $btn[0], placement: $btn.closest('#appTabs').length ? 'top-start' : 'right-start', items: items, event: event, onClickItem: function(info){info.event.preventDefault();}}); diff --git a/module/index/ui/index.html.php b/module/index/ui/index.html.php index f579b421e3..15ecc7c0a9 100644 --- a/module/index/ui/index.html.php +++ b/module/index/ui/index.html.php @@ -28,7 +28,7 @@ jsVar('appsItems', $appsItems); jsVar('defaultOpen', !empty($open) ? $open : ''); jsVar('manualText', $lang->manual); jsVar('manualUrl', ((!empty($config->isINT)) ? $config->manualUrl['int'] : $config->manualUrl['home']) . '&theme=' . $_COOKIE['theme']); -jsVar('lang', array_merge(array('search' => $lang->index->search, 'searchAB' => $lang->searchAB), (array)$lang->index->dock)); +jsVar('langData', array_merge(array('search' => $lang->index->search, 'searchAB' => $lang->searchAB), (array)$lang->index->dock)); jsVar('browserMessage', $browserMessage); jsVar('pollTime', (!empty($config->message->browser->turnon) && isset($config->message->browser->pollTime)) ? $config->message->browser->pollTime : 600); jsVar('turnon', empty($config->message->browser->turnon) ? 0 : 1); diff --git a/module/install/css/showtableprogress.ui.css b/module/install/css/showtableprogress.ui.css deleted file mode 100644 index dbf15d50bf..0000000000 --- a/module/install/css/showtableprogress.ui.css +++ /dev/null @@ -1 +0,0 @@ -.progress{overflow:hidden; height:400px; display: block; white-space: normal;} diff --git a/module/install/css/step1.ui.css b/module/install/css/step1.ui.css deleted file mode 100644 index 71fe0d6df6..0000000000 --- a/module/install/css/step1.ui.css +++ /dev/null @@ -1 +0,0 @@ -.panel .panel-heading {justify-content: flex-start; gap: 0.125rem;} diff --git a/module/install/css/step2.ui.css b/module/install/css/step2.ui.css deleted file mode 100644 index 97151af510..0000000000 --- a/module/install/css/step2.ui.css +++ /dev/null @@ -1 +0,0 @@ -.table.bordered > * > tr > th:first-child {text-align: right;} diff --git a/module/install/css/step4.ui.css b/module/install/css/step4.ui.css index 33285e5ae3..6e73cf040b 100644 --- a/module/install/css/step4.ui.css +++ b/module/install/css/step4.ui.css @@ -1,6 +1 @@ -.panel {width: 1000px; margin: auto; padding-bottom: 32px;} -.panel .panel-heading {justify-content: flex-start; padding: 24px 16px; gap: 0.125rem;} -.panel .panel-body {padding: 0px 16px;} -.panel .panel-body .table.bordered > thead {background-color: var(--color-gray-100); color: var(--color-gray-900);} -.table.bordered > * > tr > td {text-align: center;} -.table.bordered > * > tr > td:first-child {text-align: left;} +.panel .panel-body {padding-top: 0px;} diff --git a/module/install/css/step5.ui.css b/module/install/css/step5.ui.css deleted file mode 100644 index 6437ac8538..0000000000 --- a/module/install/css/step5.ui.css +++ /dev/null @@ -1,2 +0,0 @@ -#mainContent .panel {padding: 1rem; margin-top: 10%;} -#mainContent .panel-heading {width: 24rem; margin: auto; padding: 0.75rem;} diff --git a/module/install/ui/app.html.php b/module/install/ui/app.html.php index 12ceca941f..b6ce20c8b8 100644 --- a/module/install/ui/app.html.php +++ b/module/install/ui/app.html.php @@ -28,10 +28,12 @@ foreach($components->category as $item) jsVar('category', $category); div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), formPanel ( set::formID('solutionForm'), diff --git a/module/install/ui/index.html.php b/module/install/ui/index.html.php index 84478fb43c..b30f1236c5 100644 --- a/module/install/ui/index.html.php +++ b/module/install/ui/index.html.php @@ -17,11 +17,12 @@ foreach($app->config->langs as $key => $value) $langItems[] = array('text' => $v div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), - setClass('px-1 mt-2'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), panel ( setClass('p-8'), diff --git a/module/install/ui/license.html.php b/module/install/ui/license.html.php index a1210ad669..13baa73a55 100644 --- a/module/install/ui/license.html.php +++ b/module/install/ui/license.html.php @@ -16,11 +16,12 @@ jsVar('nextLink', $config->inQuickon ? inlink('step5') : inlink('step1')); div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), - setClass('px-1 mt-2'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), panel ( setClass('p-8'), diff --git a/module/install/ui/progress.html.php b/module/install/ui/progress.html.php index 862445a0a9..865b59b68d 100644 --- a/module/install/ui/progress.html.php +++ b/module/install/ui/progress.html.php @@ -74,10 +74,12 @@ if(!helper::isAjaxRequest('modal')) div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), h::importCss($app->getWebRoot() . 'js/xterm/xterm.css'), set('data-loading', $lang->solution->notices->uninstallingSolution), formPanel diff --git a/module/install/ui/showtableprogress.html.php b/module/install/ui/showtableprogress.html.php index d037a68560..21279e9a76 100644 --- a/module/install/ui/showtableprogress.html.php +++ b/module/install/ui/showtableprogress.html.php @@ -15,17 +15,19 @@ set::zui(true); jsVar('dbFinish', $lang->install->dbFinish); div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), panel ( setClass('py-2'), set::title($lang->install->dbProgress), form ( - h::pre(setID('progress'), setClass('progress')), + h::pre(setID('progress'), setClass('progress block overflow-hidden h-96')), set::actions(array(array('disabled' => true, 'text' => $lang->install->next, 'class' => 'primary next'))) ) ) diff --git a/module/install/ui/step1.html.php b/module/install/ui/step1.html.php index 39ed11150c..3d5389fb56 100644 --- a/module/install/ui/step1.html.php +++ b/module/install/ui/step1.html.php @@ -63,10 +63,12 @@ foreach($dirItems as $dirItem) div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), panel ( setClass('py-2'), diff --git a/module/install/ui/step2.html.php b/module/install/ui/step2.html.php index 26326950f5..58025f047f 100644 --- a/module/install/ui/step2.html.php +++ b/module/install/ui/step2.html.php @@ -16,10 +16,12 @@ set::zui(true); div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), panel ( setClass('py-2'), @@ -33,17 +35,13 @@ div setClass('table bordered'), h::tr ( - h::th - ( - width('1/5'), - $lang->install->key - ), + h::th(setClass('text-right w-1/5'), $lang->install->key), h::th($lang->install->value), h::th() ), h::tr ( - h::th($lang->install->timezone), + h::th(setClass('text-right'), $lang->install->timezone), h::td ( picker @@ -58,7 +56,7 @@ div ), h::tr ( - h::th($lang->install->defaultLang), + h::th(setClass('text-right'), $lang->install->defaultLang), h::td ( picker @@ -74,7 +72,7 @@ div $config->edition != 'open' ? h::tr ( $config->inQuickon ? setClass('hidden') : null, - h::th($lang->install->dbDriver), + h::th(setClass('text-right'), $lang->install->dbDriver), h::td ( picker @@ -95,7 +93,7 @@ div h::tr ( $config->inQuickon ? setClass('hidden') : null, - h::th($lang->install->dbHost), + h::th(setClass('text-right'), $lang->install->dbHost), h::td ( formGroup @@ -112,7 +110,7 @@ div h::tr ( $config->inQuickon ? setClass('hidden') : null, - h::th($lang->install->dbPort), + h::th(setClass('text-right'), $lang->install->dbPort), h::td ( formGroup @@ -128,7 +126,7 @@ div h::tr ( $config->inQuickon ? setClass('hidden') : null, - h::th($lang->install->dbEncoding), + h::th(setClass('text-right'), $lang->install->dbEncoding), h::td ( formGroup @@ -145,7 +143,7 @@ div h::tr ( $config->inQuickon ? setClass('hidden') : null, - h::th($lang->install->dbUser), + h::th(setClass('text-right'), $lang->install->dbUser), h::td ( formGroup @@ -162,7 +160,7 @@ div h::tr ( $config->inQuickon ? setClass('hidden') : null, - h::th($lang->install->dbPassword), + h::th(setClass('text-right'), $lang->install->dbPassword), h::td ( formGroup @@ -178,7 +176,7 @@ div ), h::tr ( - h::th($lang->install->dbName), + h::th(setClass('text-right'), $lang->install->dbName), h::td ( formGroup @@ -194,7 +192,7 @@ div ), h::tr ( - h::th($lang->install->dbPrefix), + h::th(setClass('text-right'), $lang->install->dbPrefix), h::td ( formGroup diff --git a/module/install/ui/step3.html.php b/module/install/ui/step3.html.php index bf1b90d394..ada579747e 100644 --- a/module/install/ui/step3.html.php +++ b/module/install/ui/step3.html.php @@ -45,11 +45,12 @@ if(is_writable($configRoot) && @file_put_contents($myConfigFile, $configContent) div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), - setClass('px-1 mt-2'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), panel ( set::title($lang->install->saveConfig), diff --git a/module/install/ui/step4.html.php b/module/install/ui/step4.html.php index 0a31dbe200..28853ff02b 100644 --- a/module/install/ui/step4.html.php +++ b/module/install/ui/step4.html.php @@ -25,7 +25,11 @@ foreach($disabledFeatures as $feature) if(is_array($feature) && empty($disabledScrumFeatures)) continue; $trs[] = h::tr ( - h::td(is_array($feature) && !empty($disabledScrumFeatures) ? sprintf($this->lang->custom->scrum->common, implode($lang->comma, $disabledScrumFeatures)) : $this->lang->custom->features[$feature]), + h::td + ( + setClass('text-left'), + is_array($feature) && !empty($disabledScrumFeatures) ? sprintf($lang->custom->scrum->common, implode($lang->comma, $disabledScrumFeatures)) : $lang->custom->features[$feature] + ), h::td ( icon @@ -51,7 +55,11 @@ foreach($config->custom->allFeatures as $feature) $trs[] = h::tr ( - h::td(($feature == 'scrumDetail' && !empty($enabledScrumFeatures)) ? sprintf($this->lang->custom->scrum->common, implode($lang->comma, $enabledScrumFeatures)) : $this->lang->custom->features[$feature]), + h::td + ( + setClass('text-left'), + ($feature == 'scrumDetail' && !empty($enabledScrumFeatures)) ? sprintf($lang->custom->scrum->common, implode($lang->comma, $enabledScrumFeatures)) : $lang->custom->features[$feature] + ), h::td ( icon @@ -73,18 +81,21 @@ foreach($config->custom->allFeatures as $feature) div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), formPanel ( - setClass('bg-canvas'), + setClass('bg-canvas m-auto pb-8'), set::title($lang->install->selectMode), set::titleClass('text-xl'), set::actions(array()), to::heading ( + setClass('justify-start gap-1'), span ( setClass('text-gray'), @@ -93,12 +104,12 @@ div setClass('text-warning px-1'), 'help' ), - $this->lang->upgrade->remarkDesc + $lang->upgrade->remarkDesc ) ), h::table ( - setClass('table bordered'), + setClass('table bordered text-center'), h::thead ( h::tr @@ -111,12 +122,12 @@ div h::td ( width('1/3'), - $this->lang->custom->modeList['light'] + $lang->custom->modeList['light'] ), h::td ( width('1/3'), - $this->lang->custom->modeList['ALM'] + $lang->custom->modeList['ALM'] ) ) ), @@ -124,9 +135,9 @@ div ( h::tr ( - h::td($lang->custom->usage), - h::td($this->lang->custom->modeIntroductionList['light']), - h::td($this->lang->custom->modeIntroductionList['ALM']), + h::td(setClass('text-left'), $lang->custom->usage), + h::td($lang->custom->modeIntroductionList['light']), + h::td($lang->custom->modeIntroductionList['ALM']), ), $trs, h::tr diff --git a/module/install/ui/step5.html.php b/module/install/ui/step5.html.php index 0d63777e04..3ca46e6300 100644 --- a/module/install/ui/step5.html.php +++ b/module/install/ui/step5.html.php @@ -21,10 +21,12 @@ if(isset($error)) div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), isset($success) ? panel ( set::title($lang->install->success), @@ -37,6 +39,7 @@ div ( setClass('bg-canvas m-auto mw-auto'), set::title($lang->install->getPriv), + set::headingClass('w-96 m-auto'), set::formClass('w-96 m-auto'), set::submitBtnText(!empty($config->inQuickon) ? $lang->install->next : $lang->save), formRow diff --git a/module/install/ui/step6.html.php b/module/install/ui/step6.html.php index fb2576e7d6..8f403d8f1e 100644 --- a/module/install/ui/step6.html.php +++ b/module/install/ui/step6.html.php @@ -16,10 +16,12 @@ $joinZentao = ($installFileDeleted ? $lang->install->successLabel : $lang->insta div ( - set::id('main'), + setID('main'), + setClass('flex justify-center'), div ( - set::id('mainContent'), + setID('mainContent'), + setClass('px-1 mt-2 w-full max-w-7xl'), panel ( setClass('p-2'), diff --git a/module/instance/config/form.php b/module/instance/config/form.php index c25da1481f..041a8abda8 100644 --- a/module/instance/config/form.php +++ b/module/instance/config/form.php @@ -1,5 +1,4 @@ instance->form = new stdclass(); $config->instance->form->create = array(); $config->instance->form->create['appType'] = array('type' => 'string', 'required' => true, 'default' => ''); @@ -7,7 +6,6 @@ $config->instance->form->create['name'] = array('type' => 'string', 'requ $config->instance->form->create['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->instance->form->create['account'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->instance->form->create['password'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->instance->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => isset($app->user->account) ? $app->user->account : ''); $config->instance->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->instance->form->create['private'] = array('type' => 'string', 'required' => false, 'default' => uniqid()); @@ -16,7 +14,6 @@ $config->instance->form->edit['name'] = array('type' => 'string', 'require $config->instance->form->edit['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->instance->form->edit['account'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->instance->form->edit['password'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->instance->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => isset($app->user->account) ? $app->user->account : ''); $config->instance->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->instance->form->install = array(); diff --git a/module/instance/control.php b/module/instance/control.php index 1228c49bf1..9b42eb9b8f 100644 --- a/module/instance/control.php +++ b/module/instance/control.php @@ -203,7 +203,9 @@ class instance extends control $this->loadModel('sonarqube'); $this->app->loadLang('pipeline'); - $externalApp = form::data($this->config->instance->form->create)->get(); + $externalApp = form::data($this->config->instance->form->create) + ->add('createdBy', isset($this->app->user->account) ? $this->app->user->account : '') + ->get(); $externalApp->type = $type; $externalApp->url = rtrim($externalApp->url, '/'); if(!$this->instance->checkAppNameUnique($externalApp->name)) return $this->send(array('result' => false, 'message' => array('name' => sprintf($this->lang->error->repeat, $this->lang->pipeline->name, $externalApp->name)))); @@ -231,7 +233,9 @@ class instance extends control if($_POST) { - $instance = form::data($this->config->instance->form->edit)->get(); + $instance = form::data($this->config->instance->form->edit) + ->add('editedBy', isset($this->app->user->account) ? $this->app->user->account : '') + ->get(); $this->pipeline->update($externalID, $instance); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/jenkins/config/form.php b/module/jenkins/config/form.php index a14c156a54..f34be8761f 100644 --- a/module/jenkins/config/form.php +++ b/module/jenkins/config/form.php @@ -1,5 +1,4 @@ jenkins->form = new stdclass(); $config->jenkins->form->create = array(); @@ -10,7 +9,6 @@ $config->jenkins->form->create['url'] = array('type' => 'string', 'req $config->jenkins->form->create['account'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->jenkins->form->create['token'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); $config->jenkins->form->create['password'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); -$config->jenkins->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->jenkins->form->create['createdDate'] = array('type' => 'datetime', 'required' => false, 'default' => helper::now()); $config->jenkins->form->create['private'] = array('type' => 'string', 'required' => false, 'default' => uniqid()); @@ -20,5 +18,4 @@ $config->jenkins->form->edit['url'] = array('type' => 'string', 'requir $config->jenkins->form->edit['account'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->jenkins->form->edit['token'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); $config->jenkins->form->edit['password'] = array('type' => 'string', 'required' => false, 'default' => '', 'filter' => 'trim'); -$config->jenkins->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->jenkins->form->edit['editedDate'] = array('type' => 'datetime', 'required' => false, 'default' => helper::now()); diff --git a/module/jenkins/control.php b/module/jenkins/control.php index 70c7154c37..06a0a99e62 100644 --- a/module/jenkins/control.php +++ b/module/jenkins/control.php @@ -38,7 +38,9 @@ class jenkins extends control { if($_POST) { - $jenkins = form::data($this->config->jenkins->form->create)->get(); + $jenkins = form::data($this->config->jenkins->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); $this->jenkinsZen->checkTokenAccess($jenkins->url, $jenkins->account, $jenkins->password, $jenkins->token); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); @@ -63,7 +65,9 @@ class jenkins extends control $jenkins = $this->loadModel('pipeline')->getByID($jenkinsID); if($_POST) { - $jenkins = form::data($this->config->jenkins->form->edit)->get(); + $jenkins = form::data($this->config->jenkins->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); $this->jenkinsZen->checkTokenAccess($jenkins->url, $jenkins->account, $jenkins->password, $jenkins->token); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/job/config/form.php b/module/job/config/form.php index e0eb0bfc54..b5d85e03b7 100644 --- a/module/job/config/form.php +++ b/module/job/config/form.php @@ -1,7 +1,6 @@ job->form = new stdclass(); $config->job->form->create = array(); @@ -23,7 +22,6 @@ $config->job->form->create['jkServer'] = array('type' => 'int', 'requi $config->job->form->create['jkTask'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->job->form->create['paramName'] = array('type' => 'array', 'required' => false, 'default' => array()); $config->job->form->create['paramValue'] = array('type' => 'array', 'required' => false, 'default' => array()); -$config->job->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->job->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => $now); $config->job->form->edit = array(); @@ -45,5 +43,4 @@ $config->job->form->edit['jkServer'] = array('type' => 'int', 'require $config->job->form->edit['jkTask'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->job->form->edit['paramName'] = array('type' => 'array', 'required' => false, 'default' => array()); $config->job->form->edit['paramValue'] = array('type' => 'array', 'required' => false, 'default' => array()); -$config->job->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->job->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => $now); diff --git a/module/job/control.php b/module/job/control.php index c3d518f6be..bc188b37a1 100644 --- a/module/job/control.php +++ b/module/job/control.php @@ -100,6 +100,7 @@ class job extends control ->setIF($this->post->useZentao != '1' || $this->post->triggerType != 'tag', 'lastTag', '') ->setIF($this->post->frame != 'sonarqube', 'sonarqubeServer', 0) ->setIF($this->post->frame != 'sonarqube', 'projectKey', '') + ->add('createdBy', $this->app->user->account) ->get(); $jobID = $this->job->create($job); @@ -142,6 +143,7 @@ class job extends control ->setIF($this->post->useZentao != '1' || $this->post->triggerType != 'tag', 'lastTag', '') ->setIF($this->post->frame != 'sonarqube', 'sonarqubeServer', 0) ->setIF($this->post->frame != 'sonarqube', 'projectKey', '') + ->add('editedBy', $this->app->user->account) ->get(); $this->job->update($jobID, $job); diff --git a/module/kanban/config/form.php b/module/kanban/config/form.php index c9e1a9ad8d..833d9ca9ba 100644 --- a/module/kanban/config/form.php +++ b/module/kanban/config/form.php @@ -14,15 +14,15 @@ $config->kanban->form->createSpace['desc'] = array('type' => 'string', 're $config->kanban->form->editSpace = $config->kanban->form->createSpace; $config->kanban->form->activateSpace['status'] = array('type' => 'string', 'required' => true, 'default' => 'active'); -$config->kanban->form->activateSpace['activatedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->activateSpace['activatedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->activateSpace['activatedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); -$config->kanban->form->activateSpace['lastEditedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->activateSpace['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->activateSpace['lastEditedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); $config->kanban->form->closeSpace['status'] = array('type' => 'string', 'required' => true, 'default' => 'closed'); -$config->kanban->form->closeSpace['closedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->closeSpace['closedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->closeSpace['closedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); -$config->kanban->form->closeSpace['lastEditedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->closeSpace['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->closeSpace['lastEditedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); $config->kanban->form->create['name'] = array('type' => 'string', 'required' => true, 'default' => ''); @@ -39,7 +39,7 @@ $config->kanban->form->create['performable'] = array('type' => 'string', 'req $config->kanban->form->create['alignment'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->create['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); $config->kanban->form->create['whitelist'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); -$config->kanban->form->create['createdBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->create['createdDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->kanban->form->create['copyKanbanID'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->kanban->form->create['copyRegion'] = array('type' => 'string', 'required' => false, 'default' => '0'); @@ -49,7 +49,7 @@ $config->kanban->form->edit['space'] = array('type' => 'int', 'req $config->kanban->form->edit['owner'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->edit['team'] = array('type' => 'array', 'required' => false, 'default' => '', 'filter' => 'join'); $config->kanban->form->edit['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); -$config->kanban->form->edit['lastEditedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->edit['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->edit['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->kanban->form->setting['showWIP'] = array('type' => 'string', 'required' => false, 'default' => ''); @@ -62,15 +62,15 @@ $config->kanban->form->setting['performable'] = array('type' => 'string', 'req $config->kanban->form->setting['alignment'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->activate['status'] = array('type' => 'string', 'required' => true, 'default' => 'active'); -$config->kanban->form->activate['activatedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->activate['activatedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->activate['activatedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); -$config->kanban->form->activate['lastEditedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->activate['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->activate['lastEditedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); $config->kanban->form->close['status'] = array('type' => 'string', 'required' => true, 'default' => 'closed'); -$config->kanban->form->close['closedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->close['closedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->close['closedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); -$config->kanban->form->close['lastEditedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->close['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->close['lastEditedDate'] = array('type' => 'datetime', 'required' => true, 'default' => $now); $config->kanban->form->createLane['name'] = array('type' => 'string', 'required' => true, 'default' => ''); @@ -98,7 +98,7 @@ $config->kanban->form->createCard['assignedTo'] = array('type' => 'array', $config->kanban->form->createCard['begin'] = array('type' => 'date', 'required' => false, 'default' => ''); $config->kanban->form->createCard['end'] = array('type' => 'date', 'required' => false, 'default' => ''); $config->kanban->form->createCard['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); -$config->kanban->form->createCard['createdBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->createCard['createdBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->createCard['createdDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->kanban->form->createCard['assignedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->kanban->form->createCard['color'] = array('type' => 'string', 'required' => false, 'default' => '#fff'); @@ -112,7 +112,7 @@ $config->kanban->form->editCard['assignedTo'] = array('type' => 'array', $config->kanban->form->editCard['begin'] = array('type' => 'date', 'required' => false, 'default' => ''); $config->kanban->form->editCard['end'] = array('type' => 'date', 'required' => false, 'default' => ''); $config->kanban->form->editCard['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); -$config->kanban->form->editCard['lastEditedBy'] = array('type' => 'string', 'required' => true, 'default' => $app->user->account); +$config->kanban->form->editCard['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->kanban->form->editCard['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->kanban->form->batchCreateCard['name'] = array('type' => 'string', 'required' => true, 'default' => '', 'base' => 'true'); diff --git a/module/kanban/control.php b/module/kanban/control.php index 67ddff6975..22051bd2a9 100644 --- a/module/kanban/control.php +++ b/module/kanban/control.php @@ -129,6 +129,8 @@ class kanban extends control $space = form::data($this->config->kanban->form->activateSpace) ->add('closedBy', '') ->add('closedDate', null) + ->add('activatedBy', $this->app->user->account) + ->add('lastEditedBy', $this->app->user->account) ->get(); $this->kanban->activateSpace($spaceID, $space); @@ -160,6 +162,8 @@ class kanban extends control $space = form::data($this->config->kanban->form->closeSpace) ->add('activatedBy', '') ->add('activatedDate', null) + ->add('closedBy', $this->app->user->account) + ->add('lastEditedBy', $this->app->user->account) ->get(); $this->kanban->closeSpace($spaceID, $space); @@ -205,7 +209,9 @@ class kanban extends control { if(!empty($_POST)) { - $kanban = form::data($this->config->kanban->form->create)->get(); + $kanban = form::data($this->config->kanban->form->create) + ->setDefault('createdBy', $this->app->user->account) + ->get(); $this->kanban->create($kanban); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); @@ -227,7 +233,9 @@ class kanban extends control { if(!empty($_POST)) { - $kanban = form::data($this->config->kanban->form->edit)->get(); + $kanban = form::data($this->config->kanban->form->edit) + ->setDefault('lastEditedBy', $this->app->user->account) + ->get(); $this->kanban->update($kanbanID, $kanban); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); @@ -297,6 +305,8 @@ class kanban extends control $kanban = form::data($this->config->kanban->form->activate) ->setDefault('closedBy', '') ->setDefault('closedDate', null) + ->setDefault('activatedBy', $this->app->user->account) + ->setDefault('lastEditedBy', $this->app->user->account) ->get(); $this->kanban->activate($kanbanID, $kanban); @@ -327,6 +337,8 @@ class kanban extends control $kanban = form::data($this->config->kanban->form->close) ->setDefault('activatedBy', '') ->setDefault('activatedDate', null) + ->setDefault('closedBy', $this->app->user->account) + ->setDefault('lastEditedBy', $this->app->user->account) ->get(); $this->kanban->close($kanbanID, $kanban); @@ -745,6 +757,7 @@ class kanban extends control ->add('kanban', $kanbanID) ->add('region', $regionID) ->add('group', $groupID) + ->setDefault('createdBy', $this->app->user->account) ->get(); $this->kanban->createCard($columnID, $card); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); @@ -810,7 +823,9 @@ class kanban extends control { if(!empty($_POST)) { - $card = form::data($this->config->kanban->form->editCard)->get(); + $card = form::data($this->config->kanban->form->editCard) + ->setDefault('lastEditedBy', $this->app->user->account) + ->get(); $this->kanban->updateCard($cardID, $card); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/kanban/tao.php b/module/kanban/tao.php index acadced9b5..66eaefa2fd 100644 --- a/module/kanban/tao.php +++ b/module/kanban/tao.php @@ -910,6 +910,8 @@ class kanbanTao extends kanbanModel */ protected function getStoryCardMenu(int $executionID, array $objects): array { + $execution = $this->loadModel('execution')->getByID($executionID); + $menus = array(); $objects = $this->loadModel('story')->mergeReviewer($objects); foreach($objects as $story) @@ -923,7 +925,7 @@ class kanbanTao extends kanbanModel if(common::hasPriv('task', 'create') and $toTaskPriv) $menu[] = array('label' => $this->lang->execution->wbs, 'icon' => 'plus', 'url' => helper::createLink('task', 'create', "executionID=$executionID&storyID=$story->id&moduleID=$story->module"), 'modal' => true, 'size' => 'lg'); if(common::hasPriv('task', 'batchCreate') and $toTaskPriv) $menu[] = array('label' => $this->lang->execution->batchWBS, 'icon' => 'pluses', 'url' => helper::createLink('task', 'batchCreate', "executionID=$executionID&storyID=$story->id&moduleID=0&taskID=0&iframe=true"), 'modal' => true, 'size' => 'lg'); if(common::hasPriv('story', 'activate') and $this->story->isClickable($story, 'activate')) $menu[] = array('label' => $this->lang->story->activate, 'icon' => 'magic', 'url' => helper::createLink('story', 'activate', "storyID=$story->id"), 'modal' => true, 'size' => 'lg'); - if(common::hasPriv('execution', 'unlinkStory')) $menu[] = array('label' => $this->lang->execution->unlinkStory, 'icon' => 'unlink', 'url' => helper::createLink('execution', 'unlinkStory', "executionID=$executionID&storyID=$story->story&confirm=no&from=taskkanban")); + if(common::hasPriv('execution', 'unlinkStory') && $execution->hasProduct) $menu[] = array('label' => $this->lang->execution->unlinkStory, 'icon' => 'unlink', 'url' => helper::createLink('execution', 'unlinkStory', "executionID=$executionID&storyID=$story->story&confirm=no&from=taskkanban")); if(common::hasPriv('story', 'delete')) $menu[] = array('label' => $this->lang->story->delete, 'icon' => 'trash', 'url' => helper::createLink('story', 'delete', "storyID=$story->id&confirm=no&from=taskkanban")); $menus[$story->id] = $menu; diff --git a/module/metric/calc/product/scale/count_of_annual_created_requirement_in_product.php b/module/metric/calc/product/scale/count_of_annual_created_requirement_in_product.php index 897cadb690..73776f5898 100755 --- a/module/metric/calc/product/scale/count_of_annual_created_requirement_in_product.php +++ b/module/metric/calc/product/scale/count_of_annual_created_requirement_in_product.php @@ -32,7 +32,7 @@ class count_of_annual_created_requirement_in_product extends baseCalc $type = $data->type; $openedDate = $data->openedDate; - if(empty($openedDate)) return false; + if(empty($openedDate) || $type != 'requirement') return false; $year = substr($openedDate, 0, 4); if($year == '0000') return false; diff --git a/module/metric/control.php b/module/metric/control.php index 2fe03a5da6..d46dedaf24 100755 --- a/module/metric/control.php +++ b/module/metric/control.php @@ -158,126 +158,6 @@ class metric extends control $this->display(); } - /** - * 计算一个度量项的历史数据。 - * Update history metric lib of single metric. - * - * @param string $code - * @param string $date - * @param string $calcType - * @access public - * @return void - */ - public function ajaxUpdateSingleMetricLib($code, $date, $calcType) - { - $date = str_replace('_', '-', $date); - $dateType = $this->metric->getDateTypeByCode($code); - - if($calcType == 'inference') $isCalcByCron = $this->metric->isCalcByCron($code, $date, $dateType); - - if($calcType == 'all' || !$isCalcByCron) - { - $calc = $this->metric->calculateMetricByCode($code); - $record = $this->metricZen->getRecordByCodeAndDate($code, $calc, $date); - - $records = array(); - $records[$code] = $record; - $this->metric->insertMetricLib($records, 'inference'); - } - } - - /** - * 计算历史数据。 - * Update metric lib of history. - * - * @param string $date - * @param string $calcType - * @access public - * @return void - */ - public function ajaxUpdateHistoryMetricLib($date, $calcType) - { - $date = str_replace('_', '-', $date); - $calcList = $this->metric->getCalcInstanceList(); - - $classifiedCalcGroup = json_decode(file_get_contents($this->app->getTmpRoot() . 'calc')); - - $records = array(); - foreach($classifiedCalcGroup as $calcGroup) - { - foreach($calcGroup->calcList as $code => $calc) - { - if($calcType == 'inference') - { - $dateType = $this->metric->getDateTypeByCode($code); - if($dateType == 'nodate') continue; - - $isCalcByCron = $this->metric->isCalcByCron($code, $date, $dateType); - if($isCalcByCron) continue; - } - - $calcObj = $calcList[$code]; - $calcObj->result = json_decode(json_encode($calc->result), true); - $inferenceRecord = $this->metricZen->getRecordByCodeAndDate($code, $calcObj, $date); - if(!empty($inferenceRecord)) $records[$code] = $inferenceRecord; - } - } - $this->metric->insertMetricLib($records, 'inference'); - } - - /** - * 保存计算后的度量项对象。 - * Save calculated metric to file. - * - * @access public - * @return void - */ - public function ajaxSaveCalculatedMetrics() - { - $calcList = $this->metric->getCalcInstanceList(); - $classifiedCalcGroup = $this->metric->classifyCalc($calcList); - - foreach($classifiedCalcGroup as $calcGroup) - { - if($this->config->edition == 'open' and in_array($calcGroup->dataset, array('getFeedbacks', 'getIssues', 'getRisks'))) continue; - if($this->config->edition == 'biz' and in_array($calcGroup->dataset, array('getIssues', 'getRisks'))) continue; - - try - { - $statement = $this->metricZen->prepareDataset($calcGroup); - if(empty($statement)) continue; - - $rows = $statement->fetchAll(); - $this->metricZen->calcMetric($rows, $calcGroup->calcList); - - foreach($calcGroup->calcList as $calc) $calc->setDAO(null); - } - catch(Exception $e) - { - a($this->metricZen->formatException($e)); - } - catch(Error $e) - { - a($this->metricZen->formatException($e)); - } - } - - file_put_contents($this->app->getTmpRoot() . 'calc', json_encode($classifiedCalcGroup)); - } - - /** - * 删除重复度量库数据。 - * Delete duplication record in metric data. - * - * @access public - * @return void - */ - public function ajaxDeduplicateRecord() - { - $metrics = $this->metric->getExecutableMetric(); - foreach($metrics as $code) $this->metric->deduplication($code); - } - /** * 计算度量项。 * Execute metric. @@ -324,6 +204,7 @@ class metric extends control $metrics = $this->metric->getExecutableMetric(); foreach($metrics as $code) $this->metric->deduplication($code); + $this->metric->rebuildPrimaryKey(); // 恢复之前的调试状态 $this->config->debug = $originalDebug; @@ -483,50 +364,6 @@ class metric extends control $this->display(); } - /** - * 重算度量项历史数据。 - * Recalculate metric history data. - * - * @param string $calcRange all|single - * @param string $code - * @access public - * @return string - */ - public function recalculateSetting($calcRange= 'all', $code = '') - { - $this->view->calcRange = $calcRange; - $this->view->code = $code; - $this->display(); - } - - /** - * 重算度量项进度。 - * Show recalculate progress. - * - * @param string $calcType all|inference - * @param string $calcRange all|single - * @param string $code - * @access public - * @return string - */ - public function recalculate($calcType, $calcRange = 'all', $code = '') - { - $metric = !empty($code) ? $this->metric->getByCode($code) : ''; - $dateType = !empty($code) ? $this->metric->getDateTypeByCode($code) : ''; - - $startDate = $this->metric->getInstallDate(); - $endDate = helper::now(); - - $this->view->code = $code; - $this->view->metric = $metric; - $this->view->dateType = $dateType; - $this->view->calcType = $calcType; - $this->view->calcRange = $calcRange; - $this->view->startDate = substr($startDate, 0, 10); - $this->view->endDate = substr($endDate, 0, 10); - $this->display(); - } - /** * 获取数据表格的数据。 * Get data of datatable. diff --git a/module/metric/css/preview.ui.css b/module/metric/css/preview.ui.css index df9de03cba..d6e3e207bc 100644 --- a/module/metric/css/preview.ui.css +++ b/module/metric/css/preview.ui.css @@ -4,8 +4,8 @@ #mainContent .side {overflow-x: hidden; padding-right: 4px;} #mainContent .main {overflow-x: hidden;} -#featureBar .nav-feature li:last-child {padding-left: 4px;} -#featureBar .nav-feature li:nth-last-child(2):before {content: ""; position: absolute; left: 2px; top: 5px; right: 0; bottom: 5px; width: 1px; background-color: var(--color-gray-300);} +#featureBar .nav-feature li.divider-before {padding-left: 4px;} +#featureBar .nav-feature li.divider-before:before {content: ""; position: absolute; left: -1px; top: 5px; bottom: 5px; width: 1px; background-color: var(--color-gray-300);} .filter-btn {padding-left: 0.625rem !important; padding-right: 0.625rem !important;} diff --git a/module/metric/js/preview.ui.js b/module/metric/js/preview.ui.js index 3bf9e03dfc..adc01b2cd8 100644 --- a/module/metric/js/preview.ui.js +++ b/module/metric/js/preview.ui.js @@ -21,6 +21,7 @@ window.afterPageUpdate = function($target, info, options) } window.addTitle2Star(); + window.addDivider(); window.initFilterPanel(); } @@ -41,6 +42,13 @@ window.addTitle2Star = function() $('.metric-collect').attr('title', collectStar); } +window.addDivider = function() +{ + let features = $('#featureBar .nav-feature').find('li.nav-item'); + let lastItem = features[features.length - 1]; + $(lastItem).addClass('divider-before'); +} + /* 事件处理函数。 */ window.handleCheckboxChange = function($el) { @@ -83,7 +91,7 @@ window.handleFilterCheck = function() window.handleFilterToggle = function($el) { - $el.toggleClass('primary-600'); + $el.toggleClass('ring-primary'); $('.filter-panel').toggleClass('hidden'); } @@ -274,10 +282,10 @@ window.initFilterPanel = function() $('#mainMenu').after($('.filter-panel')); - $('.filter-btn').removeClass('primary-600'); + $('.filter-btn').removeClass('ring-primary'); if(scope == 'filter') { - $('.filter-btn').addClass('primary-600'); + $('.filter-btn').addClass('ring-primary'); $('.filter-panel').removeClass('hidden'); window.updateFilterCheck(); } @@ -697,7 +705,7 @@ window.genDataZoom = function(dataLength, initZoom = 10, axis = 'x') window.hideFilterPanel = function() { - $('.filter-btn').removeClass('primary-600'); + $('.filter-btn').removeClass('ring-primary'); $('.filter-panel').addClass('hidden'); } diff --git a/module/metric/model.php b/module/metric/model.php index 382e3c3124..a54f10e3bb 100755 --- a/module/metric/model.php +++ b/module/metric/model.php @@ -833,6 +833,18 @@ class metricModel extends model return dao::isError(); } + /** + * 重建主键顺序。 + * Rebuild primary key order. + * + * @access public + * @return void + */ + public function rebuildPrimaryKey() + { + $this->metricTao->rebuildIdColumn(); + } + /** * 根据度量项收集周期来清理过期的度量库数据。 * Clear outdated metric records by cycle. @@ -1230,6 +1242,7 @@ class metricModel extends model ->where('deleted')->eq(0) ->andWhere('shadow')->eq(0) ->andWhere('createdDate')->le($date) + ->andWhere("if(closedDate IS NOT NULL and YEAR(closedDate)!='0000', closedDate>='$date', true)") ->andWhere("vision LIKE '%{$vision}%'", true) ->orWhere("vision IS NULL")->markRight(1) ->fetchPairs(); @@ -1239,6 +1252,7 @@ class metricModel extends model ->where('deleted')->eq(0) ->andWhere('type')->eq('project') ->andWhere('openedDate')->le($date) + ->andWhere("if(closedDate IS NOT NULL and YEAR(closedDate)!='0000', closedDate>='$date', true)") ->andWhere("vision LIKE '%{$vision}%'", true) ->orWhere("vision IS NULL")->markRight(1) ->fetchPairs(); @@ -1248,6 +1262,7 @@ class metricModel extends model ->where('deleted')->eq(0) ->andWhere('type')->in('sprint,stage,kanban') ->andWhere('openedDate')->le($date) + ->andWhere("if(closedDate IS NOT NULL and YEAR(closedDate)!='0000', closedDate>='$date', true)") ->andWhere("vision LIKE '%{$vision}%'", true) ->orWhere("vision IS NULL")->markRight(1) ->fetchPairs(); @@ -2611,6 +2626,14 @@ class metricModel extends model */ public function getInstallDate() { + $installedDate = $this->dao->select('value')->from(TABLE_CONFIG) + ->where('section')->eq('global') + ->andWhere('key')->eq('installedDate') + ->limit(1) + ->fetch('value'); + + if(!empty($installedDate) && substr($installedDate, 0 ,4) == '0000') return $installedDate; + return $this->dao->select('date')->from(TABLE_ACTION) ->orderBy('date_asc') ->limit(1) diff --git a/module/metric/tao.php b/module/metric/tao.php index 87c7d9a226..123818c5a9 100644 --- a/module/metric/tao.php +++ b/module/metric/tao.php @@ -474,10 +474,11 @@ class metricTao extends metricModel $intersect = array_intersect($fields, array('year', 'month', 'week', 'day')); foreach($fields as $key => $field) $fields[$key] = "`$field`"; if(empty($intersect)) $fields[] = 'left(date, 10)'; + $table = TABLE_METRICLIB; $sql = "INSERT INTO `metriclib_distinct` (id) "; $sql .= "SELECT MAX(id) AS id "; - $sql .= "FROM zt_metriclib WHERE metricCode = '{$code}' "; + $sql .= "FROM $table WHERE metricCode = '{$code}' "; $sql .= "GROUP BY " . implode(',', $fields); $this->dao->exec($sql); @@ -493,7 +494,8 @@ class metricTao extends metricModel */ protected function deleteDuplicationRecord(string $code): void { - $sql = "DELETE FROM zt_metriclib "; + $table = TABLE_METRICLIB; + $sql = "DELETE FROM $table "; $sql .= "WHERE id NOT IN (SELECT id FROM metriclib_distinct) "; $sql .= "AND metricCode = '{$code}'"; @@ -511,4 +513,20 @@ class metricTao extends metricModel { $this->dao->exec("DROP TABLE IF EXISTS `metriclib_distinct`"); } + + /** + * 重建id列顺序。 + * Rebuild id column order. + * + * @access protected + * @return void + */ + protected function rebuildIdColumn(): void + { + $table = TABLE_METRICLIB; + $tableRowCount = $this->dao->select('COUNT(id) as rowcount')->from(TABLE_METRICLIB)->fetch('rowcount'); + $autoIncrement = $tableRowCount + 1; + $this->dao->exec("SET @count = 0;UPDATE $table SET `id` = @count:= @count + 1;"); + $this->dao->exec("ALTER TABLE $table AUTO_INCREMENT = $autoIncrement"); + } } diff --git a/module/metric/ui/component/filterpanel.html.php b/module/metric/ui/component/filterpanel.html.php index 08f435844f..872ede2348 100644 --- a/module/metric/ui/component/filterpanel.html.php +++ b/module/metric/ui/component/filterpanel.html.php @@ -44,7 +44,7 @@ $fnGenerateFilterContent = function($filterItems) use($lang, $fnGenerateFilterBl ( btn ( - setClass('btn ghost filter-btn'), + setClass('search-form-toggle rounded-full gray-300-outline size-sm btn filter-btn'), set::icon('search'), bind::click('window.handleFilterToggle($element)'), span diff --git a/module/metric/ui/previewsingle.html.php b/module/metric/ui/previewsingle.html.php index 149764e23e..22720c0a76 100644 --- a/module/metric/ui/previewsingle.html.php +++ b/module/metric/ui/previewsingle.html.php @@ -37,7 +37,8 @@ $fnGenerateSide = function() use($groupMetrics, $current, $viewType, $scope, $la $metricList[] = li ( set::className($class . ' metric-item font-medium'), - a( + a + ( $metric->name, set::href(helper::createLink('metric', 'preview', $params)) ) diff --git a/module/metric/zen.php b/module/metric/zen.php index 718dc6b579..bee105e654 100644 --- a/module/metric/zen.php +++ b/module/metric/zen.php @@ -291,14 +291,9 @@ class metricZen extends metric } else { - if($date == 'now') - { - $scopeList = $this->metric->getPairsByScope($scope); - } - else - { - $scopeList = $this->metric->getPairsByScopeAndDate($scope, $date); - } + if($date == 'now') $date = helper::today(); + + $scopeList = $this->metric->getPairsByScopeAndDate($scope, $date); foreach($scopeList as $key => $value) { diff --git a/module/misc/lang/de.php b/module/misc/lang/de.php index 1f77cb073a..36e7ad8bd9 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'] = '2024-04-15'; +$lang->misc->releaseDate['20.0'] = '2024-04-23'; $lang->misc->releaseDate['18.12'] = '2024-04-12'; $lang->misc->releaseDate['20.0.beta2'] = '2024-03-15'; $lang->misc->releaseDate['18.11'] = '2024-02-28'; @@ -226,7 +226,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'][] = array('title' => "", 'desc' => ''); +$lang->misc->feature->all['20.0'][] = array('title' => 'In this upgrade, we have reconstructed the underlying PHP and UI frameworks, revamped the core forms and dashboards, resulting in a completely elevated user experience.', 'desc' => ''); $lang->misc->feature->all['18.12'][] = array('title' => "To better streamline our services, we have discontinued information and associated evaluations for non-R&D users, while implementing timely reminders for impending technical service deadlines. Our latest update includes a comprehensive approach to metric management, offering customizable metrics, a robust library of foundational metrics, and the convenience of recalculating historical metric data at one click. Additionally, we are excited to introduce the demand pool matrix, enabling the removal of approved demands from roadmaps. Furthermore, our Operations Management Interface has been enhanced with the addition of feedback settings. In addition, we have introduced the 'Associated Demand Pool' search criterion, making it easier for users to search for requirements within the demand pool.", 'desc' => ''); $lang->misc->feature->all['20.0.beta2'][] = array('title' => 'Enhance the functionality and fine-tune the details, while addressing any known bugs.', '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' => ''); diff --git a/module/misc/lang/en.php b/module/misc/lang/en.php index 64d9948d88..94ac3174e4 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'] = '2024-04-15'; +$lang->misc->releaseDate['20.0'] = '2024-04-23'; $lang->misc->releaseDate['18.12'] = '2024-04-12'; $lang->misc->releaseDate['20.0.beta2'] = '2024-03-15'; $lang->misc->releaseDate['18.11'] = '2024-02-28'; @@ -226,7 +226,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'][] = array('title' => "", 'desc' => ''); +$lang->misc->feature->all['20.0'][] = array('title' => 'In this upgrade, we have reconstructed the underlying PHP and UI frameworks, revamped the core forms and dashboards, resulting in a completely elevated user experience.', 'desc' => ''); $lang->misc->feature->all['18.12'][] = array('title' => "To better streamline our services, we have discontinued information and associated evaluations for non-R&D users, while implementing timely reminders for impending technical service deadlines. Our latest update includes a comprehensive approach to metric management, offering customizable metrics, a robust library of foundational metrics, and the convenience of recalculating historical metric data at one click. Additionally, we are excited to introduce the demand pool matrix, enabling the removal of approved demands from roadmaps. Furthermore, our Operations Management Interface has been enhanced with the addition of feedback settings. In addition, we have introduced the 'Associated Demand Pool' search criterion, making it easier for users to search for requirements within the demand pool.", 'desc' => ''); $lang->misc->feature->all['20.0.beta2'][] = array('title' => 'Enhance the functionality and fine-tune the details, while addressing any known bugs.', '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' => ''); diff --git a/module/misc/lang/fr.php b/module/misc/lang/fr.php index dd4f22df07..e234b89f6a 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'] = '2024-04-15'; +$lang->misc->releaseDate['20.0'] = '2024-04-23'; $lang->misc->releaseDate['18.12'] = '2024-04-12'; $lang->misc->releaseDate['20.0.beta2'] = '2024-03-15'; $lang->misc->releaseDate['18.11'] = '2024-02-28'; @@ -226,7 +226,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'][] = array('title' => "", 'desc' => ''); +$lang->misc->feature->all['20.0'][] = array('title' => 'In this upgrade, we have reconstructed the underlying PHP and UI frameworks, revamped the core forms and dashboards, resulting in a completely elevated user experience.', 'desc' => ''); $lang->misc->feature->all['18.12'][] = array('title' => "To better streamline our services, we have discontinued information and associated evaluations for non-R&D users, while implementing timely reminders for impending technical service deadlines. Our latest update includes a comprehensive approach to metric management, offering customizable metrics, a robust library of foundational metrics, and the convenience of recalculating historical metric data at one click. Additionally, we are excited to introduce the demand pool matrix, enabling the removal of approved demands from roadmaps. Furthermore, our Operations Management Interface has been enhanced with the addition of feedback settings. In addition, we have introduced the 'Associated Demand Pool' search criterion, making it easier for users to search for requirements within the demand pool.", 'desc' => ''); $lang->misc->feature->all['20.0.beta2'][] = array('title' => 'Enhance the functionality and fine-tune the details, while addressing any known bugs.', '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' => ''); diff --git a/module/misc/lang/zh-cn.php b/module/misc/lang/zh-cn.php index 9fa8678b0f..51a7e09801 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'] = '2024-04-15'; +$lang->misc->releaseDate['20.0'] = '2024-04-23'; $lang->misc->releaseDate['18.12'] = '2024-04-12'; $lang->misc->releaseDate['20.0.beta2'] = '2024-03-15'; $lang->misc->releaseDate['18.11'] = '2024-02-28'; @@ -226,7 +226,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'][] = array('title' => "", 'desc' => ''); +$lang->misc->feature->all['20.0'][] = array('title' => '重构底层PHP和UI框架,重构核心表单和仪表盘,用户体验全新升级。', 'desc' => ''); $lang->misc->feature->all['18.12'][] = array('title' => '禅道新版本中取消非研发用户的信息和相关判断,技术服务临期增加提醒。实现度量项条目化管理、自定义度量项、基础度量库、一键重算历史度量数据。需求池需求矩阵,路标支持移除已立项需求,运营管理界面增加反馈设置功能,需求池需求搜索条件中增加所属需求池搜索条件。', 'desc' => ''); $lang->misc->feature->all['20.0.beta2'][] = array('title' => '完善细节功能,解已知Bug。', 'desc' => ''); $lang->misc->feature->all['18.11'][] = array('title' => '实现AI小程序功能,实现大屏引用度量项、全局筛选器功能,OR界面实现反馈功能,需求池需求增加关键词,撤回用户需求后需求池需求可以再次分发。', 'desc' => ''); diff --git a/module/mr/config/dtable.php b/module/mr/config/dtable.php index 6015120b54..15a7169375 100644 --- a/module/mr/config/dtable.php +++ b/module/mr/config/dtable.php @@ -80,7 +80,7 @@ $config->mr->taskDtable->fieldList['pri']['show'] = true; $config->mr->taskDtable->fieldList['assignedTo']['type'] = 'desc'; $config->mr->taskDtable->fieldList['assignedTo']['title'] = $lang->task->assignedTo; -$config->mr->taskDtable->fieldList['assignedTo']['currentUser'] = $app->user->account; +$config->mr->taskDtable->fieldList['assignedTo']['currentUser'] = ''; $config->mr->taskDtable->fieldList['assignedTo']['sortType'] = true; $config->mr->taskDtable->fieldList['assignedTo']['show'] = true; diff --git a/module/mr/config/form.php b/module/mr/config/form.php index 78c38476b0..46eb0f0870 100644 --- a/module/mr/config/form.php +++ b/module/mr/config/form.php @@ -1,5 +1,4 @@ mr->form = new stdclass(); $config->mr->form->create = array(); $config->mr->form->create['hostID'] = array('type' => 'int', 'required' => true); @@ -16,7 +15,6 @@ $config->mr->form->create['removeSourceBranch'] = array('type' => 'int', 'req $config->mr->form->create['squash'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->mr->form->create['jobID'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->mr->form->create['description'] = array('type' => 'string', 'required' => false, 'default' => ''); -$config->mr->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->mr->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->mr->form->edit = array(); @@ -29,5 +27,4 @@ $config->mr->form->edit['removeSourceBranch'] = array('type' => 'int', 'requi $config->mr->form->edit['squash'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->mr->form->edit['jobID'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->mr->form->edit['description'] = array('type' => 'string', 'required' => false, 'default' => ''); -$config->mr->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->mr->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); diff --git a/module/mr/control.php b/module/mr/control.php index 56518cf143..436952fee3 100644 --- a/module/mr/control.php +++ b/module/mr/control.php @@ -196,6 +196,7 @@ class mr extends control { $MR = form::data($this->config->mr->form->create) ->setIF($this->post->needCI == 0, 'jobID', 0) + ->add('createdBy', $this->app->user->account) ->get(); $result = $this->mr->create($MR); return $this->send($result); @@ -260,6 +261,7 @@ class mr extends control { $MR = form::data($this->config->mr->form->edit) ->setIF($this->post->needCI == 0, 'jobID', 0) + ->add('editedBy', $this->app->user->account) ->get(); $result = $this->mr->update($MRID, $MR); return $this->send($result); diff --git a/module/mr/ui/link.html.php b/module/mr/ui/link.html.php index e333af24c1..fbfa0b4a73 100644 --- a/module/mr/ui/link.html.php +++ b/module/mr/ui/link.html.php @@ -59,7 +59,9 @@ $bugCols['title']['link'] = array('module' => 'bug', 'method' => 'view', $bugs = initTableData($bugs, $bugCols); $taskCols = $config->mr->taskDtable->fieldList; -$taskCols['actions'] = $actionMenu; +$taskCols['assignedTo']['currentUser'] = $app->user->account; + +$taskCols['actions'] = $actionMenu; $taskCols['actions']['list']['unlink']['data-confirm'] = $lang->mr->confirmUnlinkTask; $taskCols['actions']['list']['unlink']['url'] = $this->createLink('mr', 'unlink', "MRID=$MR->id&productID=$product->id&type=task&linkID={id}&confirm=yes"); diff --git a/module/mr/ui/linktask.html.php b/module/mr/ui/linktask.html.php index c013175ad3..eefd2514f5 100644 --- a/module/mr/ui/linktask.html.php +++ b/module/mr/ui/linktask.html.php @@ -46,6 +46,7 @@ div $lang->repo->unlinkedTasks . "({$pager->recTotal})" ) ); +$config->repo->taskDtable->fieldList['assignedTo']['currentUser'] = $app->user->account; $allTasks = initTableData($allTasks, $config->repo->taskDtable->fieldList); $data = array_values($allTasks); dtable diff --git a/module/my/config/table.php b/module/my/config/table.php index 22fbb379a5..0090ac95b6 100644 --- a/module/my/config/table.php +++ b/module/my/config/table.php @@ -1132,4 +1132,3 @@ unset($config->my->team->dtable->fieldList['actions']); $config->my->project = new stdclass(); $config->my->project->dtable = $config->project->dtable; - diff --git a/module/my/js/audit.ui.js b/module/my/js/audit.ui.js index 9c54163578..6bf185dad9 100644 --- a/module/my/js/audit.ui.js +++ b/module/my/js/audit.ui.js @@ -17,6 +17,10 @@ window.onRenderCell = function(result, {row, col}) delete result[0].props.items[0]['href']; } } + if(result && col.name == 'title' && row.data.module == 'review') + { + result[0].props['data-toggle'] = ''; + } return result; } diff --git a/module/my/js/common.ui.js b/module/my/js/common.ui.js index dde83f23b8..13705ac3b1 100644 --- a/module/my/js/common.ui.js +++ b/module/my/js/common.ui.js @@ -1,20 +1,31 @@ -$(function() +window.updateMainNavbarBadges = function(options) { - if(typeof mode === 'string') + const rawMethod = options.rawMethod; + const mode = options.mode; + const isIPD = options.isIPD; + const isMax = options.isMax; + const isBiz = options.isBiz; + const isOpenedURAndSR = options.isOpenedURAndSR; + const todoCount = options.todoCount; + + if(typeof mode !== 'string') return; + + const $mainNavbar = $('#mainNavbar'); + $mainNavbar.find('.nav-item > a[data-id=' + mode + ']').addClass('active'); + if(rawMethod == 'work') { - const $mainNavbar = $('#mainNavbar'); - $mainNavbar.find('.nav-item > a[data-id=' + mode + ']').addClass('active'); - if(typeof rawMethod === 'string' && rawMethod == 'work') + const countMap = {task: 'task', story: 'story', bug: 'bug', testcase: 'case', testtask: 'testtask'}; + if(isOpenedURAndSR !== 0) $.extend(countMap, {requirement: 'requirement'}); + if(isBiz !== 0 || isMax !== 0 || isIPD !== 0) $.extend(countMap, {feedback: 'feedback', ticket: 'ticket'}); + if(isMax !== 0 || isIPD !== 0) $.extend(countMap, {issue: 'issue', risk: 'risk', nc: 'qa', myMeeting: 'meeting'}); + if(isIPD !== 0) $.extend(countMap, {demand: 'demand'}); + + $.each(countMap, (name, key) => { - if($mainNavbar.find('.nav-item > a[data-id=task] .label').length) return false; - - const countMap = {task: 'task', story: 'story', bug: 'bug', testcase: 'case', testtask: 'testtask'}; - if(isOpenedURAndSR !== 0) $.extend(countMap, {requirement: 'requirement'}); - if(isBiz !== 0 || isMax !== 0 || isIPD !== 0) $.extend(countMap, {feedback: 'feedback', ticket: 'ticket'}); - if(isMax !== 0 || isIPD !== 0) $.extend(countMap, {issue: 'issue', risk: 'risk', nc: 'qa', myMeeting: 'meeting'}); - if(isIPD !== 0) $.extend(countMap, {demand: 'demand'}); - - $.each(countMap, (name, key) => $mainNavbar.find('.nav-item > a[data-id=' + name + ']').append('' + todoCount[key] + '')); - } + const $item = $mainNavbar.find('.nav-item > a[data-id=' + name + ']'); + const $label = $item.find('.label'); + if($label.length) $label.text(todoCount[key]); + else $item.append('' + todoCount[key] + ''); + }); } -}); +}; diff --git a/module/my/ui/audit.html.php b/module/my/ui/audit.html.php index b753a01daf..284f0a9bbb 100644 --- a/module/my/ui/audit.html.php +++ b/module/my/ui/audit.html.php @@ -35,10 +35,10 @@ if($rawMethod != 'contribute' || $browseType != 'reviewedbyme') unset($config->m foreach($reviewList as $review) { - $type = $review->type == 'prejectreview' ? 'review' : $review->type; + $type = $review->type == 'projectreview' ? 'review' : $review->type; $isOAObject = strpos(",{$config->my->oaObjectType},", ",$type,") !== false ? true : false; - $review->module = $review->type; + $review->module = $type; if(isset($lang->{$review->type}->common)) $typeName = $lang->{$review->type}->common; if($type == 'story') $typeName = $review->storyType == 'story' ? $lang->SRCommon : $lang->URCommon; @@ -71,23 +71,6 @@ foreach($reviewList as $review) $review->result = zget($reviewResultList, $review->result); } - - $module = $type; - $method = 'review'; - $params = "id=$review->id"; - - if($isOAObject) $method = 'view'; - if(!in_array($module, array('demand', 'story', 'testcase', 'feedback'))) $method = 'approvalreview'; - - if($module == 'review') - { - $method = 'assess'; - $params .= "&from={$rawMethod}"; - - unset($config->my->audit->actionList['review']['data-toggle']); - } - - $config->my->audit->actionList['review']['url'] = createLink($module, 'view', "id={$review->id}"); } $reviewList = initTableData($reviewList, $config->my->audit->dtable->fieldList, $this->my); diff --git a/module/my/ui/header.html.php b/module/my/ui/header.html.php index 8bce147579..b5f197d2f6 100644 --- a/module/my/ui/header.html.php +++ b/module/my/ui/header.html.php @@ -10,10 +10,13 @@ declare(strict_types=1); */ namespace zin; -jsVar('mode', $mode); -jsVar('todoCount', $todoCount); -jsVar('isIPD', $isIPD); -jsVar('isMax', $isMax); -jsVar('isBiz', $isBiz); -jsVar('isOpenedURAndSR', $isOpenedURAndSR); -jsVar('rawMethod', $app->rawMethod); +$badgesOptions = array(); +$badgesOptions['mode'] = $mode; +$badgesOptions['todoCount'] = $todoCount; +$badgesOptions['isIPD'] = $isIPD; +$badgesOptions['isMax'] = $isMax; +$badgesOptions['isBiz'] = $isBiz; +$badgesOptions['isOpenedURAndSR'] = $isOpenedURAndSR; +$badgesOptions['rawMethod'] = $app->rawMethod; + +query('#featureBar')->append(on::init()->call('updateMainNavbarBadges', $badgesOptions)); diff --git a/module/my/ui/task.html.php b/module/my/ui/task.html.php index 02377dcb63..157bac5005 100644 --- a/module/my/ui/task.html.php +++ b/module/my/ui/task.html.php @@ -32,7 +32,6 @@ $footToolbar = array('items' => array $canBatchClose ? array('text' => $lang->close, 'className' => 'batch-btn ajax-btn', 'data-url' => helper::createLink('task', 'batchClose')) : null ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary')); -if($type == 'bySearch') $type = $this->session->myTaskType; if($type == 'assignedTo') unset($config->my->task->dtable->fieldList['assignedTo']); if($type == 'openedBy') unset($config->my->task->dtable->fieldList['openedBy']); if($type == 'finishedBy') unset($config->my->task->dtable->fieldList['finishedBy']); diff --git a/module/my/ui/todo.html.php b/module/my/ui/todo.html.php index 0f6306a26b..46d5a1cee7 100644 --- a/module/my/ui/todo.html.php +++ b/module/my/ui/todo.html.php @@ -70,6 +70,9 @@ toolbar setClass('btn primary'), set::icon('plus'), set::url(helper::createLink('todo', 'batchCreate')), + setData('toggle', 'modal'), + setData('size', 'lg'), + setData('class-name', 'batchCreateTodoModal'), $lang->todo->batchCreate ), $canCreate && $canBatchCreate ? dropdown @@ -78,7 +81,7 @@ toolbar set::items(array ( array('text' => $lang->todo->create, 'url' => helper::createLink('todo', 'create'), 'data-toggle' => 'modal'), - array('text' => $lang->todo->batchCreate, 'url' => helper::createLink('todo', 'batchCreate'), 'data-toggle' => 'modal', 'data-size' => 'lg') + array('text' => $lang->todo->batchCreate, 'url' => helper::createLink('todo', 'batchCreate'), 'data-toggle' => 'modal', 'data-size' => 'lg', 'data-class-name' => 'batchCreateTodoModal') )), set::placement('bottom-end') ) : null diff --git a/module/personnel/css/addwhitelist.ui.css b/module/personnel/css/addwhitelist.ui.css index 30a26251fd..f43fb1b66a 100644 --- a/module/personnel/css/addwhitelist.ui.css +++ b/module/personnel/css/addwhitelist.ui.css @@ -1,5 +1,6 @@ .add-whitelist-panel .panel-heading .select-dept-box, .add-whitelist-panel .select-object-box {display: inline-flex;} .add-whitelist-panel .panel-heading .select-dept-box .picker, .add-whitelist-panel .select-object-box .picker {width: 248px;} -.add-whitelist-panel form {width: 280px; min-width: unset;} .add-whitelist-panel .panel-body .toolbar.form-actions {width: 280px; margin-top: 1.5rem;} .add-whitelist-panel .form-batch-ditto-control .form-control {padding-right: 0.5rem;} +.add-whitelist-panel .form-batch-table {width: 300px; min-width: unset;} +.add-whitelist-panel .form-batch-container {max-height: calc(100vh - 280px)!important;} diff --git a/module/product/js/browse.ui.js b/module/product/js/browse.ui.js index 748ef8138b..b21a019315 100644 --- a/module/product/js/browse.ui.js +++ b/module/product/js/browse.ui.js @@ -37,6 +37,14 @@ $(document).off('click', '.batchUnlinkStory').on('click', '.batchUnlinkStory', f const checkedList = dtable.$.getChecks(); if(!checkedList.length) return; + /* 处理选中的子需求的ID,截取-后的子需求ID。*/ + /* Process selected child story ID. */ + for(i in checkedList) + { + const storyID = checkedList[i]; + if(storyID.includes('-')) checkedList[i] = storyID.slice(storyID.indexOf('-') + 1); + } + let batchUnlinkStoryURL = $.createLink('projectstory', 'batchUnlinkStory', 'projectID=' + projectID + '&stories=' + encodeURIComponent(checkedList.join(','))); $.get(batchUnlinkStoryURL, function(data) { diff --git a/module/product/ui/browse.html.php b/module/product/ui/browse.html.php index c6149aa899..5e99174ec8 100644 --- a/module/product/ui/browse.html.php +++ b/module/product/ui/browse.html.php @@ -327,8 +327,8 @@ featureBar toolbar ( - (!hasPriv('story', 'report') || !$productID) ? null : item(set(array('id' => 'reportBtn', 'text' => $lang->story->report->common, 'icon' => 'bar-chart', 'class' => 'ghost', 'url' => helper::createLink('story', 'report', "productID=$productID&branchID=$branch&storyType=$storyType&browseType=$browseType&moduleID=$moduleID&chartType=pie&projectID=$projectID") . ($app->tab == 'project' ? '#app=project' : '')))), - !hasPriv('story', 'export') ? null : item(set(array('id' => 'exportBtn', 'text' => $lang->export, 'icon' => 'export', 'class' => 'ghost', 'url' => helper::createLink('story', 'export', "productID=$productID&orderBy=$orderBy&executionID=$projectID&browseType=$browseType&storyType=$storyType"), 'data-toggle' => 'modal'))), + (!hasPriv('story', 'report') || !$productID) ? null : item(set(array('id' => 'reportBtn', 'icon' => 'bar-chart', 'class' => 'ghost', 'url' => helper::createLink('story', 'report', "productID=$productID&branchID=$branch&storyType=$storyType&browseType=$browseType&moduleID=$moduleID&chartType=pie&projectID=$projectID") . ($app->tab == 'project' ? '#app=project' : '')))), + !hasPriv('story', 'export') ? null : item(set(array('id' => 'exportBtn', 'icon' => 'export', 'class' => 'ghost', 'url' => helper::createLink('story', 'export', "productID=$productID&orderBy=$orderBy&executionID=$projectID&browseType=$browseType&storyType=$storyType"), 'data-toggle' => 'modal'))), $fnBuildCreateStoryButton(), $fnBuildLinkStoryButton() ); diff --git a/module/productplan/config/form.php b/module/productplan/config/form.php index 5a702f7bf9..081af7a5fd 100644 --- a/module/productplan/config/form.php +++ b/module/productplan/config/form.php @@ -1,5 +1,5 @@ productplan->form = new stdclass(); $config->productplan->form->batchEdit = array(); $config->productplan->form->batchEdit['id'] = array('type' => 'int', 'control' => 'text', 'width' => '60px', 'name' => 'id', 'label' => $lang->idAB, 'required' => false, 'default' => 0, 'base' => true); @@ -9,23 +9,20 @@ $config->productplan->form->batchEdit['status'] = array('type' => 'string', 'con $config->productplan->form->batchEdit['begin'] = array('type' => 'date', 'control' => 'date', 'width' => '128px', 'name' => 'begin', 'label' => $lang->productplan->begin, 'required' => false, 'default' => ''); $config->productplan->form->batchEdit['end'] = array('type' => 'date', 'control' => 'date', 'width' => '128px', 'name' => 'end', 'label' => $lang->productplan->end, 'required' => false, 'default' => ''); -$now = helper::now(); -$config->productplan->form->create['parent'] = array('type' => 'int', 'required' => false, 'default' => 0); -$config->productplan->form->create['branch'] = array('type' => 'array', 'required' => false, 'default' => '0', 'filter' => 'join'); -$config->productplan->form->create['title'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->productplan->form->create['begin'] = array('type' => 'date', 'required' => false, 'default' => null); -$config->productplan->form->create['end'] = array('type' => 'date', 'required' => false, 'default' => null); -$config->productplan->form->create['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); -$config->productplan->form->create['product'] = array('type' => 'int', 'required' => false, 'default' => 0); -$config->productplan->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); -$config->productplan->form->create['createdDate'] = array('type' => 'datetime ', 'required' => false, 'default' => $now); -$config->productplan->form->create['order'] = array('type' => 'string', 'required' => false, 'default' => 0); +$config->productplan->form->create['parent'] = array('type' => 'int', 'required' => false, 'default' => 0); +$config->productplan->form->create['branch'] = array('type' => 'array', 'required' => false, 'default' => '0', 'filter' => 'join'); +$config->productplan->form->create['title'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); +$config->productplan->form->create['begin'] = array('type' => 'date', 'required' => false, 'default' => null); +$config->productplan->form->create['end'] = array('type' => 'date', 'required' => false, 'default' => null); +$config->productplan->form->create['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); +$config->productplan->form->create['product'] = array('type' => 'int', 'required' => false, 'default' => 0); +$config->productplan->form->create['order'] = array('type' => 'string', 'required' => false, 'default' => 0); -$config->productplan->form->edit['parent'] = array('type' => 'int', 'required' => false, 'default' => 0); -$config->productplan->form->edit['branch'] = array('type' => 'array', 'required' => false, 'default' => '0', 'filter' => 'join'); -$config->productplan->form->edit['title'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->productplan->form->edit['begin'] = array('type' => 'date', 'required' => false, 'default' => null); -$config->productplan->form->edit['end'] = array('type' => 'date', 'required' => false, 'default' => null); -$config->productplan->form->edit['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); -$config->productplan->form->edit['product'] = array('type' => 'int', 'required' => false, 'default' => 0); -$config->productplan->form->edit['status'] = array('type' => 'string', 'required' => false, 'default' => ''); +$config->productplan->form->edit['parent'] = array('type' => 'int', 'required' => false, 'default' => 0); +$config->productplan->form->edit['branch'] = array('type' => 'array', 'required' => false, 'default' => '0', 'filter' => 'join'); +$config->productplan->form->edit['title'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); +$config->productplan->form->edit['begin'] = array('type' => 'date', 'required' => false, 'default' => null); +$config->productplan->form->edit['end'] = array('type' => 'date', 'required' => false, 'default' => null); +$config->productplan->form->edit['desc'] = array('type' => 'string', 'required' => false, 'default' => '', 'control' => 'editor'); +$config->productplan->form->edit['product'] = array('type' => 'int', 'required' => false, 'default' => 0); +$config->productplan->form->edit['status'] = array('type' => 'string', 'required' => false, 'default' => ''); diff --git a/module/productplan/control.php b/module/productplan/control.php index d22ffcfe05..c87d8b756e 100644 --- a/module/productplan/control.php +++ b/module/productplan/control.php @@ -69,7 +69,10 @@ class productplan extends control { if(!empty($_POST)) { - $planData = form::data()->get(); + $planData = form::data() + ->add('createdBy', $this->app->user->account) + ->add('createdDate', helper::now()) + ->get(); $planID = $this->productplan->create($planData, (int)$this->post->future); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); $this->loadModel('action')->create('productplan', $planID, 'opened'); diff --git a/module/program/js/kanban.ui.js b/module/program/js/kanban.ui.js index 7c7bc9fa3b..be375d039f 100644 --- a/module/program/js/kanban.ui.js +++ b/module/program/js/kanban.ui.js @@ -20,7 +20,7 @@ window.getItem = function(info) { info.item.titleUrl = $.createLink('execution', 'task', `id=${info.item.id}`); } - else if(info.item.type == 'doingProjects' && privs.canViewProject) + else if(['waitingProjects', 'doingProjects'].includes(info.item.type) && privs.canViewProject) { info.item.titleUrl = $.createLink('project', 'index', `id=${info.item.id}`); } diff --git a/module/programplan/zen.php b/module/programplan/zen.php index 0c44f09e6e..d6faad3713 100644 --- a/module/programplan/zen.php +++ b/module/programplan/zen.php @@ -89,6 +89,8 @@ class programplanZen extends programplan if(!empty($this->config->setCode) && empty($plan->code) && strpos(",{$this->config->execution->create->requiredFields},", ',code,') !== false) dao::$errors["code[{$rowID}]"] = sprintf($this->lang->error->notempty, $plan->type == 'stage' ? $this->lang->execution->code : $this->lang->code); } + if(strpos(",{$this->config->programplan->list->customCreateFields},", ',percent,') === false) $plan->percent = 0; + $totalPercent += $plan->percent; $names[] = $plan->name; if(!empty($plan->code)) $codes[] = $plan->code; diff --git a/module/project/js/execution.ui.js b/module/project/js/execution.ui.js index 5396805670..65bb82f909 100644 --- a/module/project/js/execution.ui.js +++ b/module/project/js/execution.ui.js @@ -45,7 +45,7 @@ window.onRenderCell = function(result, {col, row}) if(typeof executionType != 'undefined') executionName += `${executionType} `; executionName += '
'; - executionName += (!row.data.isParent) ? `${row.data.name}` : row.data.name; + executionName += (executionType !== undefined && !row.data.isParent) ? `${row.data.name}` : row.data.name; executionName += '
'; executionName += (row.data.end != '' && today > row.data.end) ? `${delayed}` : ''; diff --git a/module/project/ui/build.html.php b/module/project/ui/build.html.php index 2f4d0e1893..83a3cca85a 100644 --- a/module/project/ui/build.html.php +++ b/module/project/ui/build.html.php @@ -49,8 +49,12 @@ jsVar('integratedTip', $lang->build->integrated); jsVar('deletedTip', $lang->build->deleted); $fieldList = $config->build->dtable->fieldList; -if($project->model == 'kanban' && $this->app->rawModule == 'projectbuild') unset($fieldList['actions']['actionsMap']['createTest']['data-app']); -$builds = initTableData($builds, $fieldList, $app->control->build); +if($project->model == 'kanban' && $app->rawModule == 'projectbuild') +{ + unset($fieldList['actions']['list']['createTest']['data-app']); + $fieldList['actions']['list']['viewBug']['url'] = $config->build->actionList['projectBugList']['url']; +} +$builds = initTableData($builds, $fieldList, $this->build); dtable ( diff --git a/module/repo/config/dtable.php b/module/repo/config/dtable.php index 9c158e3d0e..fb6e76a32e 100644 --- a/module/repo/config/dtable.php +++ b/module/repo/config/dtable.php @@ -213,7 +213,7 @@ $config->repo->taskDtable->fieldList['assignedTo']['type'] = 'user'; $config->repo->taskDtable->fieldList['assignedTo']['sortType'] = true; $config->repo->taskDtable->fieldList['assignedTo']['show'] = true; $config->repo->taskDtable->fieldList['assignedTo']['group'] = 3; -$config->repo->taskDtable->fieldList['assignedTo']['currentUser'] = $app->user->account; +$config->repo->taskDtable->fieldList['assignedTo']['currentUser'] = ''; $config->repo->taskDtable->fieldList['assignedTo']['title'] = $lang->task->assignedTo; $config->repo->taskDtable->fieldList['assignedTo']['assignLink'] = array('module' => 'task', 'method' => 'assignTo', 'params' => 'executionID={execution}&taskID={id}'); diff --git a/module/repo/model.php b/module/repo/model.php index f8b869a32f..5a536c25b3 100644 --- a/module/repo/model.php +++ b/module/repo/model.php @@ -1855,8 +1855,8 @@ class repoModel extends model $accountPairs = array(); $userList = $this->loadModel($repo->SCM)->apiGetUsers($repo->gitService); - $acountIDPairs = $this->loadModel('pipeline')->getUserBindedPairs($repo->gitService, strtolower($repo->SCM), 'openID,account'); - foreach($userList as $gitlabUser) $accountPairs[$gitlabUser->realname] = zget($acountIDPairs, $gitlabUser->id, ''); + $accountIDPairs = $this->loadModel('pipeline')->getUserBindedPairs($repo->gitService, strtolower($repo->SCM), 'openID,account'); + foreach($userList as $gitlabUser) $accountPairs[$gitlabUser->realname] = zget($accountIDPairs, $gitlabUser->id, ''); foreach($data->commits as $commit) { diff --git a/module/repo/ui/linktask.html.php b/module/repo/ui/linktask.html.php index 6edb8a0837..3dcede34dc 100644 --- a/module/repo/ui/linktask.html.php +++ b/module/repo/ui/linktask.html.php @@ -44,6 +44,7 @@ div $lang->repo->unlinkedTasks . "({$pager->recTotal})" ) ); +$config->repo->taskDtable->fieldList['assignedTo']['currentUser'] = $app->user->account; $allTasks = initTableData($allTasks, $config->repo->taskDtable->fieldList); $data = array_values($allTasks); dtable diff --git a/module/screen/css/browse.ui.css b/module/screen/css/browse.ui.css index 9a42948bd6..5f205ecacc 100644 --- a/module/screen/css/browse.ui.css +++ b/module/screen/css/browse.ui.css @@ -1 +1,2 @@ #firstGuide .py-6 {padding: 24px !important;} +#pick-pop-dropmenu-menu{background-color: rgba(255, 255, 255, 1)!important} diff --git a/module/serverroom/config/form.php b/module/serverroom/config/form.php index 856236fc00..468f98599c 100644 --- a/module/serverroom/config/form.php +++ b/module/serverroom/config/form.php @@ -1,5 +1,4 @@ serverroom->form = new stdclass(); $config->serverroom->form->create['name'] = array('type' => 'string', 'required' => true, 'default' => ''); $config->serverroom->form->create['bandwidth'] = array('type' => 'string', 'required' => false, 'default' => ''); @@ -7,7 +6,6 @@ $config->serverroom->form->create['city'] = array('type' => 'string', 're $config->serverroom->form->create['line'] = array('type' => 'string', 'required' => true, 'default' => ''); $config->serverroom->form->create['provider'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->serverroom->form->create['owner'] = array('type' => 'string', 'required' => false, 'default' => ''); -$config->serverroom->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->serverroom->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->serverroom->form->edit['name'] = array('type' => 'string', 'required' => true, 'default' => ''); @@ -16,5 +14,4 @@ $config->serverroom->form->edit['city'] = array('type' => 'string', 'requi $config->serverroom->form->edit['line'] = array('type' => 'string', 'required' => true, 'default' => ''); $config->serverroom->form->edit['provider'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->serverroom->form->edit['owner'] = array('type' => 'string', 'required' => false, 'default' => ''); -$config->serverroom->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->serverroom->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); diff --git a/module/serverroom/control.php b/module/serverroom/control.php index ec989872f0..6e6043d4d3 100644 --- a/module/serverroom/control.php +++ b/module/serverroom/control.php @@ -62,7 +62,9 @@ class serverroom extends control { if($_POST) { - $room = form::data($this->config->serverroom->form->create)->get(); + $room = form::data($this->config->serverroom->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); $createID = $this->serverroom->create($room); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); @@ -87,7 +89,9 @@ class serverroom extends control { if($_POST) { - $room = form::data($this->config->serverroom->form->edit)->get(); + $room = form::data($this->config->serverroom->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); $changes = $this->serverroom->update($roomID, $room); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/sonarqube/config/form.php b/module/sonarqube/config/form.php index 72df3c8284..98b208cbe9 100644 --- a/module/sonarqube/config/form.php +++ b/module/sonarqube/config/form.php @@ -1,5 +1,4 @@ sonarqube->form = new stdclass(); $config->sonarqube->form->create = array(); $config->sonarqube->form->create['appType'] = array('type' => 'string', 'required' => true, 'default' => 'sonarqube'); @@ -8,7 +7,6 @@ $config->sonarqube->form->create['name'] = array('type' => 'string', 'req $config->sonarqube->form->create['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->sonarqube->form->create['account'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->sonarqube->form->create['password'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->sonarqube->form->create['createdBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->sonarqube->form->create['createdDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->sonarqube->form->create['private'] = array('type' => 'string', 'required' => false, 'default' => uniqid()); @@ -17,7 +15,6 @@ $config->sonarqube->form->edit['name'] = array('type' => 'string', 'requir $config->sonarqube->form->edit['url'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->sonarqube->form->edit['account'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); $config->sonarqube->form->edit['password'] = array('type' => 'string', 'required' => true, 'default' => '', 'filter' => 'trim'); -$config->sonarqube->form->edit['editedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); $config->sonarqube->form->edit['editedDate'] = array('type' => 'string', 'required' => false, 'default' => helper::now()); $config->sonarqube->form->createProject['projectName'] = array('type' => 'string', 'required' => true); diff --git a/module/sonarqube/control.php b/module/sonarqube/control.php index 96077f6779..91ed11686b 100644 --- a/module/sonarqube/control.php +++ b/module/sonarqube/control.php @@ -137,7 +137,9 @@ class sonarqube extends control { if($_POST) { - $sonarqube = form::data($this->config->sonarqube->form->create)->get(); + $sonarqube = form::data($this->config->sonarqube->form->create) + ->add('createdBy', $this->app->user->account) + ->get(); $this->checkToken($sonarqube, 0); $sonarqubeID = $this->loadModel('pipeline')->create($sonarqube); @@ -199,7 +201,9 @@ class sonarqube extends control $oldSonarQube->password = $this->post->password; $this->checkToken($oldSonarQube, $sonarqubeID); - $sonarqube = form::data($this->config->sonarqube->form->edit)->get(); + $sonarqube = form::data($this->config->sonarqube->form->edit) + ->add('editedBy', $this->app->user->account) + ->get(); $sonarqube->token = $oldSonarQube->token; $this->pipeline->update($sonarqubeID, $sonarqube); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/module/story/config/form.php b/module/story/config/form.php index 0c5ebadb4d..f0f40c56b2 100644 --- a/module/story/config/form.php +++ b/module/story/config/form.php @@ -73,26 +73,26 @@ $config->story->form->edit['duplicateStory'] = array('type' => 'int', 'contr $config->story->form->edit['childStories'] = array('type' => 'array', 'control' => 'select', 'required' => false, 'default' => '', 'options' => array(), 'filter' => 'join'); $config->story->form->batchCreate = array(); -$config->story->form->batchCreate['branch'] = array('ditto' => true, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => 0, 'options' => array()); -$config->story->form->batchCreate['module'] = array('ditto' => true, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => 0, 'options' => array()); -$config->story->form->batchCreate['plan'] = array('ditto' => true, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => 0, 'options' => array()); -$config->story->form->batchCreate['assignedTo'] = array('ditto' => false, 'type' => 'string', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => '', 'options' => 'users'); -$config->story->form->batchCreate['region'] = array('ditto' => false, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => 0, 'options' => array()); -$config->story->form->batchCreate['lane'] = array('ditto' => false, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => 0, 'options' => array()); -$config->story->form->batchCreate['title'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => true, 'width' => '240px', 'default' => '', 'filter' => 'trim', 'base' => true); -$config->story->form->batchCreate['color'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'default' => '', 'filter' => 'trim'); -$config->story->form->batchCreate['spec'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '240px', 'default' => ''); -$config->story->form->batchCreate['source'] = array('ditto' => true, 'type' => 'string', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => '', 'options' => $lang->story->sourceList); -$config->story->form->batchCreate['sourceNote'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '200px', 'default' => '', 'filter' => 'trim'); -$config->story->form->batchCreate['verify'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '200px', 'default' => ''); -$config->story->form->batchCreate['category'] = array('ditto' => true, 'type' => 'string', 'control' => 'select', 'required' => false, 'width' => '160px', 'default' => 'feature', 'options' => $lang->story->categoryList); -$config->story->form->batchCreate['pri'] = array('ditto' => false, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '92px', 'default' => $config->story->defaultPriority, 'options' => $lang->story->priList); -$config->story->form->batchCreate['estimate'] = array('ditto' => false, 'type' => 'float', 'control' => 'text', 'required' => false, 'width' => '76px', 'default' => 0); -$config->story->form->batchCreate['reviewer'] = array('ditto' => true, 'type' => 'array', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => '', 'multiple' => true, 'options' => array()); -$config->story->form->batchCreate['URS'] = array('ditto' => false, 'type' => 'array', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => '', 'multiple' => true); -$config->story->form->batchCreate['parent'] = array('ditto' => false, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => ''); -$config->story->form->batchCreate['keywords'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '200px', 'default' => ''); -$config->story->form->batchCreate['mailto'] = array('ditto' => false, 'type' => 'array', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => array(''), 'multiple' => true, 'options' => 'users', 'filter' => 'join'); +$config->story->form->batchCreate['branch'] = array('ditto' => true, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => 0, 'options' => array()); +$config->story->form->batchCreate['module'] = array('ditto' => true, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => 0, 'options' => array()); +$config->story->form->batchCreate['plan'] = array('ditto' => true, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => 0, 'options' => array()); +$config->story->form->batchCreate['assignedTo'] = array('ditto' => false, 'type' => 'string', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => '', 'options' => 'users'); +$config->story->form->batchCreate['region'] = array('ditto' => false, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => 0, 'options' => array()); +$config->story->form->batchCreate['lane'] = array('ditto' => false, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => 0, 'options' => array()); +$config->story->form->batchCreate['title'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => true, 'width' => '240px', 'default' => '', 'filter' => 'trim', 'base' => true); +$config->story->form->batchCreate['color'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'default' => '', 'filter' => 'trim'); +$config->story->form->batchCreate['spec'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '240px', 'default' => ''); +$config->story->form->batchCreate['source'] = array('ditto' => true, 'type' => 'string', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => '', 'options' => $lang->story->sourceList); +$config->story->form->batchCreate['sourceNote'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '200px', 'default' => '', 'filter' => 'trim'); +$config->story->form->batchCreate['verify'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '200px', 'default' => ''); +$config->story->form->batchCreate['category'] = array('ditto' => true, 'type' => 'string', 'control' => 'select', 'required' => false, 'width' => '160px', 'default' => 'feature', 'options' => $lang->story->categoryList); +$config->story->form->batchCreate['pri'] = array('ditto' => false, 'type' => 'int', 'control' => 'priPicker', 'required' => false, 'width' => '92px', 'default' => $config->story->defaultPriority, 'options' => $lang->story->priList); +$config->story->form->batchCreate['estimate'] = array('ditto' => false, 'type' => 'float', 'control' => 'text', 'required' => false, 'width' => '76px', 'default' => 0); +$config->story->form->batchCreate['reviewer'] = array('ditto' => true, 'type' => 'array', 'control' => 'select', 'required' => false, 'width' => '136px', 'default' => '', 'multiple' => true, 'options' => array()); +$config->story->form->batchCreate['URS'] = array('ditto' => false, 'type' => 'array', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => '', 'multiple' => true); +$config->story->form->batchCreate['parent'] = array('ditto' => false, 'type' => 'int', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => ''); +$config->story->form->batchCreate['keywords'] = array('ditto' => false, 'type' => 'string', 'control' => 'text', 'required' => false, 'width' => '200px', 'default' => ''); +$config->story->form->batchCreate['mailto'] = array('ditto' => false, 'type' => 'array', 'control' => 'select', 'required' => false, 'width' => '200px', 'default' => array(''), 'multiple' => true, 'options' => 'users', 'filter' => 'join'); $config->story->form->batchEdit = array(); $config->story->form->batchEdit['branch'] = array('type' => 'int', 'width' => '200px', 'control' => 'picker', 'required' => false, 'default' => 0, 'options' => array()); diff --git a/module/story/ui/edit.html.php b/module/story/ui/edit.html.php index 6bcc6c00c4..01758319ab 100644 --- a/module/story/ui/edit.html.php +++ b/module/story/ui/edit.html.php @@ -394,13 +394,13 @@ detailBody item ( set::name(' '), - !empty($story->linkStoryTitles) ? h::ul + !empty($story->linkStoryTitles) ? div ( setID('linkedStories'), array_values(array_map(function($linkStoryID, $linkStoryTitle) use($story) { $linkStoryField = $story->type == 'story' ? 'linkStories' : 'linkRequirements'; - return h::li + return div ( set::title($linkStoryTitle), checkbox(set::name($linkStoryField . '[]'), set::rootClass('inline'), set::value($linkStoryID), set::checked(true)), diff --git a/module/story/ui/view.html.php b/module/story/ui/view.html.php index 333663caca..b817b84583 100644 --- a/module/story/ui/view.html.php +++ b/module/story/ui/view.html.php @@ -195,7 +195,7 @@ foreach($actions as $key => $action) continue; } - if(isset($action['url'])) $actions[$key]['url'] = str_replace(array('{id}', '{type}', '{product}', '{branch}', '{module}', '{execution}'), array($story->id, $story->type, $story->product, $story->branch, $story->module, $executionID), $action['url']); + if(isset($action['url'])) $actions[$key]['url'] = str_replace(array('{id}', '{type}', '{product}', '{branch}', '{module}', '{execution}'), array($story->id, $story->type, $story->product, $story->branch, $story->module, isset($projectID) ? $projectID : 0), $action['url']); if(isset($action['items'])) { foreach($action['items'] as $itemKey => $itemAction) diff --git a/module/story/zen.php b/module/story/zen.php index 32b912990d..7ed163e463 100644 --- a/module/story/zen.php +++ b/module/story/zen.php @@ -1696,6 +1696,11 @@ class storyZen extends story return $this->session->storyList; } + if($this->app->tab == 'product') + { + return $this->createLink('product', 'browse', "productID=$productID&branch=$branch&browseType=unclosed&queryID=0&storyType=$storyType"); + } + helper::setcookie('storyModule', '0', 0); if($this->session->storyList) return $this->session->storyList; return $this->createLink('product', 'browse', "productID=$productID&branch=$branch&browseType=unclosed&queryID=0&storyType=$storyType"); diff --git a/module/task/config/form.php b/module/task/config/form.php index 79fde6f843..d3d589f6ca 100644 --- a/module/task/config/form.php +++ b/module/task/config/form.php @@ -6,6 +6,8 @@ $config->task->form->team = new stdclass(); $config->task->form->testTask = new stdclass(); global $app; +$account = isset($app->user->account) ? $app->user->account : ''; + $config->task->form->create = array(); $config->task->form->create['execution'] = array('type' => 'int', 'required' => true, 'default' => 0); $config->task->form->create['type'] = array('type' => 'string', 'required' => true, 'default' => ''); @@ -22,7 +24,7 @@ $config->task->form->create['estStarted'] = array('type' => 'date', 'requi $config->task->form->create['deadline'] = array('type' => 'date', 'required' => false, 'default' => null); $config->task->form->create['vision'] = array('type' => 'string', 'required' => false, 'default' => $config->vision); $config->task->form->create['status'] = array('type' => 'string', 'required' => false, 'default' => 'wait'); -$config->task->form->create['openedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->create['openedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->create['openedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->create['version'] = array('type' => 'int', 'required' => false, 'default' => 1); $config->task->form->create['storyVersion'] = array('type' => 'int', 'required' => false, 'default' => 1); @@ -34,7 +36,7 @@ $config->task->form->assign = array(); $config->task->form->assign['assignedTo'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->task->form->assign['assignedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->assign['left'] = array('type' => 'float', 'required' => true); -$config->task->form->assign['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->assign['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->assign['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->cancel = array(); @@ -76,7 +78,7 @@ $config->task->form->edit['canceledDate'] = array('type' => 'datetime', 'requi $config->task->form->edit['closedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->task->form->edit['closedReason'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->task->form->edit['closedDate'] = array('type' => 'datetime', 'required' => false, 'default' => null); -$config->task->form->edit['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->edit['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->edit['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->edit['deleteFiles'] = array('type' => 'array', 'required' => false, 'default' => array()); @@ -103,7 +105,7 @@ $config->task->form->batchedit['consumed'] = array('type' => 'float', ' $config->task->form->batchedit['left'] = array('type' => 'float', 'required' => false, 'default' => 0); $config->task->form->batchedit['estStarted'] = array('type' => 'date', 'required' => false, 'default' => null); $config->task->form->batchedit['deadline'] = array('type' => 'date', 'required' => false, 'default' => null); -$config->task->form->batchedit['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->batchedit['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->batchedit['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->batchcreate = array(); @@ -122,12 +124,12 @@ $config->task->form->batchcreate['deadline'] = array('type' => 'date', $config->task->form->batchcreate['desc'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->task->form->batchcreate['pri'] = array('type' => 'int', 'required' => false, 'default' => 0); $config->task->form->batchcreate['lane'] = array('type' => 'int', 'required' => false, 'default' => 0); -$config->task->form->batchcreate['openedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->batchcreate['openedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->batchcreate['openedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->batchcreate['vision'] = array('type' => 'string', 'required' => false, 'default' => $config->vision); $config->task->form->pause = array(); -$config->task->form->pause['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->pause['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->pause['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->pause['status'] = array('type' => 'string', 'required' => false, 'default' => 'pause'); @@ -139,7 +141,7 @@ $config->task->form->activate['comment'] = array('type' => 'string', 'r $config->task->form->activate['status'] = array('type' => 'string', 'required' => false, 'default' => 'doing'); $config->task->form->activate['activatedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->activate['assignedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); -$config->task->form->activate['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->activate['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->activate['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->activate['finishedBy'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->task->form->activate['canceledBy'] = array('type' => 'string', 'required' => false, 'default' => ''); @@ -155,7 +157,7 @@ $config->task->form->start['consumed'] = array('type' => 'float', 'requ $config->task->form->start['left'] = array('type' => 'float', 'required' => false, 'default' => 0); $config->task->form->start['assignedTo'] = array('type' => 'string', 'required' => false, 'default' => ''); $config->task->form->start['realStarted'] = array('type' => 'datetime', 'required' => false, 'default' => null); -$config->task->form->start['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->start['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->start['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->finish = array(); @@ -167,17 +169,17 @@ $config->task->form->finish['status'] = array('type' => 'string', 're $config->task->form->finish['finishedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->finish['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->finish['assignedDate'] = array('type' => 'string', 'required' => false, 'default' => $now); -$config->task->form->finish['finishedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); -$config->task->form->finish['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->finish['finishedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); +$config->task->form->finish['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->finish['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->close = array(); $config->task->form->close['status'] = array('type' => 'string', 'required' => false, 'default' => 'closed'); $config->task->form->close['assignedTo'] = array('type' => 'string', 'required' => false, 'default' => 'closed'); $config->task->form->close['assignedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); -$config->task->form->close['closedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->close['closedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->close['closedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); -$config->task->form->close['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $app->user->account); +$config->task->form->close['lastEditedBy'] = array('type' => 'string', 'required' => false, 'default' => $account); $config->task->form->close['lastEditedDate'] = array('type' => 'datetime', 'required' => false, 'default' => $now); $config->task->form->testTask->create = array(); diff --git a/module/task/control.php b/module/task/control.php index 28f7e5d406..9b1888cf3f 100755 --- a/module/task/control.php +++ b/module/task/control.php @@ -333,7 +333,7 @@ class task extends control if(!$task) { if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'fail', 'code' => 404, 'message' => '404 Not found')); - return $this->send(array('result' => 'success', 'load' => array('alert' => $this->lang->notFound, 'locate' => $this->config->vision == 'lite' ? $this->createLink('project', 'index') : $this->createLink('execution', 'all')))); + return $this->sendError($this->lang->notFound, $this->config->vision == 'lite' ? $this->createLink('project', 'index') : $this->createLink('execution', 'all')); } if(!$this->loadModel('common')->checkPrivByObject('execution', $task->execution)) return print(js::error($this->lang->execution->accessDenied) . js::locate($this->createLink('execution', 'all'))); diff --git a/module/testcase/js/batchcreate.js b/module/testcase/js/batchcreate.js index d5c6f32f92..8e0e217daf 100644 --- a/module/testcase/js/batchcreate.js +++ b/module/testcase/js/batchcreate.js @@ -76,10 +76,10 @@ function canSceneDitto(num) var trList = $("#tableBody").find("tbody").find("tr"); - var rowModule = $(trList[rIndex]).find("td:eq(2)").find("select").val(); + var rawModule = $(trList[rIndex]).find("td:eq(2)").find("select").val(); var preModule = $(trList[rIndex-1]).find("td:eq(2)").find("select").val(); - return rowModule == "ditto" || rowModule == preModule; + return rawModule == "ditto" || rawModule == preModule; } function onModuleChanged(productID, moduleID, num) diff --git a/module/testcase/js/browse.ui.js b/module/testcase/js/browse.ui.js index 39ea934b37..eba0a8dc16 100644 --- a/module/testcase/js/browse.ui.js +++ b/module/testcase/js/browse.ui.js @@ -208,7 +208,7 @@ window.setStatistics = function(element, checks) }); } - return element.options.customData.pageSummary; + return element.options.customData ? element.options.customData.pageSummary : ''; } /** diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index ba9ac75ba6..7cb17501a7 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -352,7 +352,7 @@ $lang->testcase->onlyAutomated = '仅自动化'; $lang->testcase->onlyScene = '仅场景'; $lang->testcase->iScene = '所属场景'; $lang->testcase->generalTitle = '标题'; -$lang->testcase->noScene = '暂时没有场景'; +$lang->testcase->noScene = '暂时没有场景。'; $lang->testcase->rowIndex = '行索引'; $lang->testcase->nestTotal = '嵌套总数'; $lang->testcase->normal = '正常'; diff --git a/module/testcase/model.php b/module/testcase/model.php index 74dfe7671f..8a451c96dd 100755 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -1446,7 +1446,7 @@ class testcaseModel extends model $projects = array($this->session->execution); } if(!empty($case->project)) $projects[] = $case->project; - if(!empty($case->execution)) $projects[] = $case->project; + if(!empty($case->execution)) $projects[] = $case->execution; if(empty($projects)) return false; $this->loadModel('action'); diff --git a/module/testcase/ui/browse.html.php b/module/testcase/ui/browse.html.php index 80e894351b..5cf058087d 100644 --- a/module/testcase/ui/browse.html.php +++ b/module/testcase/ui/browse.html.php @@ -150,9 +150,9 @@ div( set::nested(true), set::footToolbar($footToolbar), set::footPager(usePager()), - set::emptyTip($lang->testcase->noCase), - set::createTip($lang->testcase->create), - set::createLink($canModify && hasPriv('testcase', 'create') ? createLink('testcase', 'create', 'productID=' . zget($product, 'id', 0) . "&branch={$branch}&moduleID={$moduleID}" . ($app->tab == 'project' ? "&from=project¶m={$projectID}" : '')) : ''), + set::emptyTip($browseType == 'onlyscene' ? $lang->testcase->noScene : $lang->testcase->noCase), + set::createTip($browseType == 'onlyscene' ? $lang->testcase->createScene : $lang->testcase->create), + set::createLink($browseType == 'onlyscene' ? ($canCreateScene ? $createSceneLink : '') : ($canCreateCase ? $createCaseLink : '')), set::customData(array('isOnlyScene' => $isOnlyScene, 'pageSummary' => $summary, 'modules' => $modulePairs)) ) ); diff --git a/module/testcase/ui/header.html.php b/module/testcase/ui/header.html.php index e9a048552e..635a91bd37 100644 --- a/module/testcase/ui/header.html.php +++ b/module/testcase/ui/header.html.php @@ -227,21 +227,20 @@ if(!empty($productID)) $createItems = array(); if($canCreateCase) { - $params = "productID={$productID}&branch={$branch}&moduleID={$moduleID}"; - if($app->tab == 'project') $params .= "&from=project¶m={$projectID}"; - $createItems[] = array('text' => $lang->testcase->create, 'url' => createLink('testcase', 'create', $params), 'data-app' => $app->tab); + $createCaseLink = createLink('testcase', 'create', "productID={$productID}&branch={$branch}&moduleID={$moduleID}" . ($app->tab == 'project' ? "&from=project¶m={$projectID}" : '')); + $createItems[] = array('text' => $lang->testcase->create, 'url' => $createCaseLink, 'data-app' => $app->tab); } if($canBatchCreateCase) { - $link = createLink('testcase', 'batchCreate', "productID=$productID&branch=$branch&moduleID=$moduleID"); - $createItems[] = array('text' => $lang->testcase->batchCreate, 'url' => $link, 'data-app' => $app->tab); + $batchCreateCaseLink = createLink('testcase', 'batchCreate', "productID=$productID&branch=$branch&moduleID=$moduleID"); + $createItems[] = array('text' => $lang->testcase->batchCreate, 'url' => $batchCreateCaseLink, 'data-app' => $app->tab); } if($canCreateScene) { - $link = createLink('testcase', 'createScene', "productID=$productID&branch=$branch&moduleID=$moduleID"); - $createItems[] = array('text' => $lang->testcase->newScene, 'url' => $link, 'data-app' => $app->tab); + $createSceneLink = createLink('testcase', 'createScene', "productID=$productID&branch=$branch&moduleID=$moduleID"); + $createItems[] = array('text' => $lang->testcase->newScene, 'url' => $createSceneLink, 'data-app' => $app->tab); } $currentCreateItem = current($createItems); diff --git a/module/testcase/ui/view.html.php b/module/testcase/ui/view.html.php index 1652a58254..fcb31957ee 100644 --- a/module/testcase/ui/view.html.php +++ b/module/testcase/ui/view.html.php @@ -61,7 +61,7 @@ if(!empty($case->steps) && $stepsType == 'table') width('1/2'), span ( - setClass('pr-2 pl-' . (($step->grade - 1) * 2)), + setClass('nowrap pr-2 pl-' . (($step->grade - 1) * 2)), $step->name ), html(nl2br(str_replace(' ', ' ', $step->desc))) diff --git a/module/testcase/zen.php b/module/testcase/zen.php index 41436de99d..868063c451 100755 --- a/module/testcase/zen.php +++ b/module/testcase/zen.php @@ -147,7 +147,7 @@ class testcaseZen extends testcase */ protected function buildBrowseSearchForm(int $productID, string $branch, int $queryID, int $projectID): void { - $this->config->testcase->search['onMenuBar'] = 'yes'; + if($this->app->rawModule == 'testcase') $this->config->testcase->search['onMenuBar'] = 'yes'; $currentModule = $this->app->tab == 'project' ? 'project' : 'testcase'; $currentMethod = $this->app->tab == 'project' ? 'testcase' : 'browse'; @@ -393,7 +393,6 @@ class testcaseZen extends testcase $storyModuleID = array_key_exists($currentModuleID, $productModules) ? $currentModuleID : 0; $modules = $this->tree->getStoryModule($storyModuleID); $modules = $this->tree->getAllChildID($modules); - $currentModuleID = $storyModuleID; } /* 获取未关闭的需求。 */ @@ -2105,6 +2104,19 @@ class testcaseZen extends testcase foreach($reverseSteps as $step) { if(empty($step->id)) continue; + + if($step->type != 'group') + { + $descItem = array(); + $descItem['id'] = 'desc_' . $step->id; + $descItem['text'] = $step->expect; + $descItem['type'] = 'node'; + $descItem['parent'] = $step->id; + $descItem['subSide'] = 'right'; + + $parentSteps[$step->id][] = $descItem; + } + $stepItem = array(); $stepItem['id'] = $step->id; $stepItem['text'] = $step->step; diff --git a/module/testtask/js/runcase.ui.js b/module/testtask/js/runcase.ui.js index 8b86337fb0..72ffb1c5e2 100644 --- a/module/testtask/js/runcase.ui.js +++ b/module/testtask/js/runcase.ui.js @@ -4,9 +4,9 @@ $(function() loadResult(); }); -$('#runCaseModal').closest('.modal').on('hide.zui.modal', function() +$('#runCaseModal').closest('.modal').off('hide.zui.modal').on('hide.zui.modal', function() { - if($('#casesResults').length == 0) loadCurrentPage(); + loadCurrentPage(); }); /** diff --git a/module/testtask/zen.php b/module/testtask/zen.php index ee1f4cb17b..0eec51a72f 100644 --- a/module/testtask/zen.php +++ b/module/testtask/zen.php @@ -657,26 +657,17 @@ class testtaskZen extends testtask $automation = $this->loadModel('zanode')->getAutomationByProduct($run->case->product); if($run->case->auto == 'auto' && $confirm == '') { - if(!$automation) - { - if(helper::isAjaxRequest()) return $this->send(array('load' => $cancelURL)); - $this->locate($cancelURL); - } + if(!$automation) return $this->send(array('load' => $cancelURL)); $confirmURL = inlink('runCase', "runID=$runID&caseID=$caseID&version=$version&confirm=yes"); - if(helper::isAjaxRequest()) return $this->send(array('result' => 'fail', 'load' => array('confirm' => $this->lang->zanode->runCaseConfirm, 'confirmed' => $confirmURL, 'canceled' => $cancelURL))); - return print(js::start() . "zui.Modal.hide($(document).find('.modal')); zui.Modal.confirm('{$this->lang->zanode->runCaseConfirm}').then((res) => {if(res){ openUrl({url: '{$confirmURL}', load: 'modal', size: 'lg'});}else{ openUrl({url: '{$cancelURL}', load: 'modal', size: 'lg'});}});" . js::end()); + return $this->send(array('result' => 'fail', 'load' => array('confirm' => $this->lang->zanode->runCaseConfirm, 'confirmed' => $confirmURL, 'canceled' => $cancelURL))); } /* 用户确认后执行自动化测试的相关操作。*/ /* Perform automated testing related operations after user confirmation. */ if($confirm == 'yes') { - if(!$automation) - { - if(helper::isAjaxRequest()) return $this->send(array('load' => $cancelURL)); - $this->locate($cancelURL); - } + if(!$automation) return $this->send(array('load' => $cancelURL)); $resultID = $this->testtask->initResultForAutomatedTest($runID, $caseID, $run->case->version, $automation->node); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError(), 'load' => $this->createLink('zanode', 'browse'))); diff --git a/module/todo/css/batchcreate.ui.css b/module/todo/css/batchcreate.ui.css index f675b2e011..8369d1cefd 100644 --- a/module/todo/css/batchcreate.ui.css +++ b/module/todo/css/batchcreate.ui.css @@ -1 +1,2 @@ +.batchCreateTodoModal .modal-body {overflow-y: hidden;} #batchCreateTodoForm .panel-actions {margin-right: 18px; margin-top: -18px;} diff --git a/module/todo/js/batchcreate.ui.js b/module/todo/js/batchcreate.ui.js index b5b9da176e..75b28f6a48 100644 --- a/module/todo/js/batchcreate.ui.js +++ b/module/todo/js/batchcreate.ui.js @@ -34,7 +34,7 @@ window.changeType = function(e) } } -window.changFuture = function() +window.changeFuture = function() { const isChecked = $('#futureDate[type="checkbox"]').prop('checked'); const $todoDate = $('#todoDate').zui('datePicker'); @@ -66,27 +66,20 @@ window.initTime = function(e) const options = $picker.options; const items = options.items; const isBegin = options.name.indexOf('begin') === 0; + const index = parseInt($tr.data('index')); - const index = parseInt($tr.data('index')); if(isBegin) { let endValue = ''; - if(!value) + items.forEach(function(item, timeIndex) { - endValue = items[0].value; - } - else - { - items.forEach(function(item, timeIndex) + if(item.value == value) { - if(item.value == value) - { - endIndex = timeIndex + 3; - endValue = items.length <= endIndex ? '' : items[endIndex].value; - return; - } - }); - } + endIndex = timeIndex + 3; + endValue = items.length <= endIndex ? items[items.length - 1].value : items[endIndex].value; + return; + } + }); $end.zui('picker').$.setValue(endValue); if(typeof endIndex != 'undefined') value = endIndex; } @@ -106,6 +99,7 @@ window.initTime = function(e) return; } }); + if(value == '2350') value='6000'; $(this).find('[data-name="beginAndEnd"] [data-name="begin"]').zui('picker').$.setValue(value); $(this).find('[data-name="beginAndEnd"] [data-name="end"]').zui('picker').$.setValue(endValue); if(typeof endIndex != 'undefined') value = endIndex; diff --git a/module/todo/ui/batchcreate.html.php b/module/todo/ui/batchcreate.html.php index bee084d187..93aeb040bb 100644 --- a/module/todo/ui/batchcreate.html.php +++ b/module/todo/ui/batchcreate.html.php @@ -72,7 +72,7 @@ formBatchPanel setID('futureDate'), set::name('futureDate'), $lang->todo->periods['future'], - on::click('window.changFuture') + on::click('window.changeFuture') ) ) ) diff --git a/module/tree/model.php b/module/tree/model.php index d42f66fff8..c0325815b3 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -1020,15 +1020,15 @@ class treeModel extends model $table2 = TABLE_CASE; } - $paths = $this->dao->select("t3.{$field}")->from($table1)->alias('t1') - ->leftJoin($table2)->alias('t2')->on('t1.' . $linkObject . ' = t2.id') - ->leftJoin(TABLE_MODULE)->alias('t3')->on('t2.module = t3.id') - ->leftJoin(TABLE_PROJECT)->alias('t4')->on('t1.project = t4.id') + $paths = $this->dao->select("t4.{$field}")->from(TABLE_PROJECT)->alias('t1') + ->leftJoin($table1)->alias('t2')->on('t1.id=t2.project') + ->leftJoin($table2)->alias('t3')->on("t2.{$linkObject}=t3.id") + ->leftJoin(TABLE_MODULE)->alias('t4')->on('t3.module=t4.id') ->where('t3.deleted')->eq(0) - ->andWhere('t2.deleted')->eq(0) - ->andWhere("(t1.project = '{$executionID}' OR t4.project = '{$executionID}')") - ->beginIF(isset($extra['branchID']) && $branch !== 'all')->andWhere('t2.branch')->eq($branch)->fi() - ->fetchPairs($field, $field); + ->andWhere('t4.deleted')->eq(0) + ->andWhere('t1.project', true)->eq($executionID)->orWhere('t2.project')->eq($executionID)->markRight(1) + ->beginIF(isset($extra['branchID']) && $branch !== 'all')->andWhere('t3.branch')->eq($branch)->fi() + ->fetchPairs(); } elseif($linkObject == 'bug' && str_contains(',project,execution,', ",{$this->app->tab},")) { @@ -1038,7 +1038,7 @@ class treeModel extends model ->andWhere('t2.deleted')->eq(0) ->beginIF(isset($extra['branchID']) && $branch !== 'all')->andWhere('t1.branch')->eq($branch)->fi() ->andWhere("t1.{$this->app->tab}")->eq($executionID) - ->fetchPairs($field, $field); + ->fetchPairs(); } else { diff --git a/module/upgrade/config.php b/module/upgrade/config.php index 765606e927..da1027671c 100644 --- a/module/upgrade/config.php +++ b/module/upgrade/config.php @@ -46,8 +46,7 @@ $config->upgrade->maxVersion['max4_9'] = '18_9'; $config->upgrade->maxVersion['max4_10'] = '18_10'; $config->upgrade->maxVersion['max4_10_1'] = '18_10_1'; $config->upgrade->maxVersion['max4_11'] = '18_11'; -$config->upgrade->maxVersion['max4_12'] = '18_12'; -$config->upgrade->maxVersion['max5_0_beta1'] = '20_0'; // max insert position. +$config->upgrade->maxVersion['max4_12'] = '18_12'; // max insert position. $config->upgrade->bizVersion = array(); $config->upgrade->bizVersion['biz1_0'] = '9_5_1'; @@ -132,8 +131,7 @@ $config->upgrade->bizVersion['biz8_9'] = '18_9'; $config->upgrade->bizVersion['biz8_10'] = '18_10'; $config->upgrade->bizVersion['biz8_10_1'] = '18_10_1'; $config->upgrade->bizVersion['biz8_11'] = '18_11'; -$config->upgrade->bizVersion['biz8_12'] = '18_12'; -$config->upgrade->bizVersion['biz10_0_beta1'] = '20_0'; // biz insert position. +$config->upgrade->bizVersion['biz8_12'] = '18_12'; // biz insert position. $config->upgrade->proVersion = array(); $config->upgrade->proVersion['pro1_0'] = '3_1'; @@ -255,8 +253,7 @@ $config->upgrade->ipdVersion['ipd1_1_1'] = '18_9'; $config->upgrade->ipdVersion['ipd1_1_2'] = '18_10'; $config->upgrade->ipdVersion['ipd1_2'] = '18_10_1'; $config->upgrade->ipdVersion['ipd1_3'] = '18_11'; -$config->upgrade->ipdVersion['ipd1_4'] = '18_12'; -$config->upgrade->ipdVersion['ipd1_5_beta1'] = '20_0'; // ipd insert position. +$config->upgrade->ipdVersion['ipd1_4'] = '18_12'; // ipd insert position. $config->upgrade->lowerTables = array(); $config->upgrade->lowerTables[$config->db->prefix . 'caseStep'] = $config->db->prefix . 'casestep'; @@ -1185,6 +1182,11 @@ $config->delete['20_0_beta1'][] = 'module/metric/ui/view.html.php'; $config->delete['20_0_beta1'][] = 'module/metric/ui/viewphpmetric.html.php'; $config->delete['20_0_beta1'][] = 'module/metric/ui/viewsqlmetric.html.php'; +$config->delete['20_0_beta2'][] = 'module/install/css/showtableprogress.ui.css'; +$config->delete['20_0_beta2'][] = 'module/install/css/step1.ui.css'; +$config->delete['20_0_beta2'][] = 'module/install/css/step2.ui.css'; +$config->delete['20_0_beta2'][] = 'module/install/css/step5.ui.css'; + $config->upgrade->openModules = array('action', 'admin', 'ai', 'bi', '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', 'demand', 'gitfox'); $config->upgrade->unsetModules = array('design', 'program', 'programplan', 'projectbuild', 'projectrelease', 'stage', 'stakeholder', 'product', 'branch', 'productplan', 'release', 'build', 'qa', 'bug', 'testcase', 'testtask', 'testreport', 'testsuite', 'caselib', 'automation', 'repo', 'ci', 'compile', 'jenkins', 'job', 'svn', 'gitlab', 'sonarqube', 'mr', 'git', 'report', 'sqlbuilder', 'feedback', 'faq', 'attend', 'holiday', 'leave', 'makeup', 'overtime', 'lieu', 'ops', 'host', 'serverroom', 'account', 'domain', 'service', 'deploy', 'conference', 'traincourse', 'pssp', 'baseline', 'classify', 'cm', 'cmcl', 'auditcl', 'reviewcl', 'process', 'activity', 'zoutput', 'auditplan', 'nc', 'subject', 'weekly', 'workestimation', 'issue', 'durationestimation', 'risk', 'opportunity', 'trainplan', 'gapanalysis', 'researchplan', 'researchreport', 'meeting', 'meetingroom', 'budget', 'reviewissue', 'reviewsetting', 'review', 'milestone', 'measurement', 'measrecord', 'assetlib', 'setting', 'im', 'client', 'ldap', 'dev', 'api', 'gitea', 'gogs', 'zanode', 'zahost'); diff --git a/module/upgrade/config/upgradeflow.php b/module/upgrade/config/upgradeflow.php index fb47e8c760..b6ebde2b30 100644 --- a/module/upgrade/config/upgradeflow.php +++ b/module/upgrade/config/upgradeflow.php @@ -95,7 +95,7 @@ $config->upgrade->execFlow['18_9'] = array('functions' => 'addDefaultTrai $config->upgrade->execFlow['18_10_1'] = array('functions' => 'migrateAIModelConfig'); $config->upgrade->execFlow['20_0_alpha1'] = array('functions' => 'revertStoryCustomFields'); $config->upgrade->execFlow['20_0_beta1'] = array('functions' => 'hideOA,updateMetricDateType,update18101,migrateAIModelConfig'); -$config->upgrade->execFlow['20_0_beta2'] = array('functions' => 'updateWorkflowFieldDefaultValue,update1811'); +$config->upgrade->execFlow['20_0_beta2'] = array('functions' => 'updateWorkflowFieldDefaultValue,update1811,updateZeroDateToNull'); if(!empty($config->isINT)) { diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php index cb828f14b1..f0dad702f6 100644 --- a/module/upgrade/lang/version.php +++ b/module/upgrade/lang/version.php @@ -383,8 +383,7 @@ $lang->upgrade->fromVersions['biz8_9'] = 'Biz8.9'; $lang->upgrade->fromVersions['biz8_10'] = 'Biz8.10'; $lang->upgrade->fromVersions['biz8_10_1'] = 'Biz8.10.1'; $lang->upgrade->fromVersions['biz8_11'] = 'Biz8.11'; -$lang->upgrade->fromVersions['biz8_12'] = 'Biz8.12'; -$lang->upgrade->fromVersions['biz10_0_beta1'] = 'Biz10.0.beta1'; // biz insert position. +$lang->upgrade->fromVersions['biz8_12'] = 'Biz8.12'; // biz insert position. /* Max. */ $lang->upgrade->fromVersions['max2_0_beta4'] = 'Max2.0.beta4'; @@ -434,8 +433,7 @@ $lang->upgrade->fromVersions['max4_9'] = 'Max4.9'; $lang->upgrade->fromVersions['max4_10'] = 'Max4.10'; $lang->upgrade->fromVersions['max4_10_1'] = 'Max4.10.1'; $lang->upgrade->fromVersions['max4_11'] = 'Max4.11'; -$lang->upgrade->fromVersions['max4_12'] = 'Max4.11'; -$lang->upgrade->fromVersions['max5_0_beta1'] = 'Max5.0.beta1'; // max insert position. +$lang->upgrade->fromVersions['max4_12'] = 'Max4.11'; // max insert position. /* Ipd */ $lang->upgrade->fromVersions['ipd1_0_beta1'] = 'Ipd1.0.beta1'; @@ -447,5 +445,4 @@ $lang->upgrade->fromVersions['ipd1_1_1'] = 'Ipd1.1.1'; $lang->upgrade->fromVersions['ipd1_1_2'] = 'Ipd1.1.2'; $lang->upgrade->fromVersions['ipd1_2'] = 'Ipd1.2'; $lang->upgrade->fromVersions['ipd1_3'] = 'Ipd1.3'; -$lang->upgrade->fromVersions['ipd1_4'] = 'Ipd1.4'; -$lang->upgrade->fromVersions['ipd1_5_beta1'] = 'Ipd1.5.beta1'; // ipd insert position. +$lang->upgrade->fromVersions['ipd1_4'] = 'Ipd1.4'; // ipd insert position. diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 78447f871b..faf1d69c05 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -8680,4 +8680,82 @@ class upgradeModel extends model } return true; } + + /** + * 将值为'0000-00-00'的日期类型字段值更新为NULL。 + * Update the default value of the fields. + * + * @access public + * @return true + */ + public function updateZeroDateToNull() + { + set_time_limit(0); + + if($this->config->db->driver == 'mysql') + { + try + { + $this->dao->exec("SET @@sql_mode=''"); + $tables = $this->dao->select("c.TABLE_NAME, c.COLUMN_NAME, c.DATA_TYPE")->from('information_schema.COLUMNS')->alias('c') + ->leftJoin('information_schema.TABLES')->alias('t') + ->on('c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME') + ->where("c.TABLE_SCHEMA")->eq($this->config->db->name) + ->andWhere("c.TABLE_NAME")->like($this->config->db->prefix . '%') + ->andWhere("t.TABLE_TYPE")->eq('BASE TABLE') + ->andWhere("c.DATA_TYPE")->in('date,datetime') + ->fetchAll(); + + foreach($tables as $table) + { + $tableName = $table->TABLE_NAME; + $columnName = $table->COLUMN_NAME; + $columnType = $table->DATA_TYPE; + + if($columnType == 'date') + { + $this->dbh->exec("UPDATE `$tableName` SET `$columnName` = NULL WHERE `$columnName` = '0000-00-00'"); + } + elseif($columnType == 'datetime') + { + $this->dbh->exec("UPDATE `$tableName` SET `$columnName` = NULL WHERE `$columnName` = '0000-00-00 00:00:00'"); + } + } + } + catch(PDOException $e) + { + $this->saveLogs($e->getMessage()); + } + } + elseif($this->config->db->driver == 'dm') + { + try + { + $tables = $this->dao->select('TABLE_NAME, COLUMN_NAME, DATA_TYPE')->from('ALL_TAB_COLUMNS') + ->where('OWNER')->eq($this->config->db->name) + ->andWhere('DATA_TYPE')->in('DATE,DATETIME') + ->fetchAll(); + + foreach($tables as $table) + { + $tableName = $table->TABLE_NAME; + $columnName = $table->COLUMN_NAME; + $columnType = $table->DATA_TYPE; + + if($columnType == 'DATE') + { + $this->dbh->exec("UPDATE $tableName SET $columnName = NULL WHERE $columnName = '0000-00-00'"); + } + elseif($columnType == 'DATETIME') + { + $this->dbh->exec("UPDATE $tableName SET $columnName = NULL WHERE $columnName = '0000-00-00 00:00:00'"); + } + } + } + catch(PDOException $e) + { + $this->saveLogs($e->getMessage()); + } + } + } } diff --git a/module/user/config/form.php b/module/user/config/form.php index 142bbfeaa8..749e110be2 100644 --- a/module/user/config/form.php +++ b/module/user/config/form.php @@ -81,12 +81,12 @@ $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('control' => '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, 'defaultDitto' => 'off'); $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['role'] = array('required' => false, 'type' => 'string', 'width' => '160px', 'name' => 'role', 'label' => $lang->user->role, 'control' => 'picker', 'default' => '', 'ditto' => true, 'defaultDitto' => 'off', '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('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' => ''); diff --git a/module/zahost/config/form.php b/module/zahost/config/form.php index 6b119439da..bbd2805cd3 100644 --- a/module/zahost/config/form.php +++ b/module/zahost/config/form.php @@ -1,6 +1,6 @@ zahost->form = new stdclass(); @@ -14,7 +14,6 @@ $config->zahost->form->create['memory'] = array('required' => true, 'type' $config->zahost->form->create['diskSize'] = array('required' => true, 'type' => 'float', 'default' => 0); $config->zahost->form->create['type'] = array('required' => false, 'type' => 'string', 'default' => 'zahost'); $config->zahost->form->create['status'] = array('required' => false, 'type' => 'string', 'default' => 'wait'); -$config->zahost->form->create['createdBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : ''); $config->zahost->form->create['createdDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now()); $config->zahost->form->create['desc'] = array('required' => false, 'type' => 'string', 'default' => '', 'control' => 'editor'); $config->zahost->form->create['zap'] = array('required' => false, 'type' => 'string', 'default' => $config->zahost->defaultPort); @@ -27,6 +26,5 @@ $config->zahost->form->edit['extranet'] = array('required' => true, 'type' => $config->zahost->form->edit['cpuCores'] = array('required' => true, 'type' => 'int', 'default' => 0); $config->zahost->form->edit['memory'] = array('required' => true, 'type' => 'float', 'default' => 0); $config->zahost->form->edit['diskSize'] = array('required' => true, 'type' => 'float', 'default' => 0); -$config->zahost->form->edit['editedBy'] = array('required' => false, 'type' => 'string', 'default' => isset($app->user->account) ? $app->user->account : ''); $config->zahost->form->edit['editedDate'] = array('required' => false, 'type' => 'date', 'default' => helper::now()); $config->zahost->form->edit['desc'] = array('required' => false, 'type' => 'string', 'default' => '', 'control' => 'editor'); diff --git a/module/zahost/control.php b/module/zahost/control.php index f72b3a46be..aac5430617 100644 --- a/module/zahost/control.php +++ b/module/zahost/control.php @@ -97,7 +97,9 @@ class zahost extends control { if($_POST) { - $hostInfo = form::data($this->config->zahost->form->create)->get(); + $hostInfo = form::data($this->config->zahost->form->create) + ->add('createdBy', isset($this->app->user->account) ? $this->app->user->account : '') + ->get(); $hostInfo->secret = md5($hostInfo->name . time()); $hostID = $this->zahost->create($hostInfo); @@ -124,7 +126,10 @@ class zahost extends control { if($_POST) { - $hostInfo = form::data($this->config->zahost->form->edit)->add('id', $hostID)->get(); + $hostInfo = form::data($this->config->zahost->form->edit) + ->add('id', $hostID) + ->add('editedBy', isset($this->app->user->account) ? $this->app->user->account : '') + ->get(); $changes = $this->zahost->update($hostInfo); if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); diff --git a/www/js/zui3/zin.js b/www/js/zui3/zin.js index a0c97e2aaa..360c282763 100644 --- a/www/js/zui3/zin.js +++ b/www/js/zui3/zin.js @@ -139,6 +139,7 @@ timers.interval = []; timers.timeout = []; + zui.Modal.getAll().forEach(m => !m.options.modal && m.hide()); $('script.zin-page-js').replaceWith(data); } @@ -657,7 +658,7 @@ function getLoadSelector(selector) { - if(!selector) return $('#main').length ? '#main>*,pageCSS/.zin-page-css>*,pageJS/.zin-page-js,hookCode(),#configJS,title>*,#heading>*,#navbar>*,#pageToolbar>*' : 'body>*,title>*,#configJS'; + if(!selector) return $('#main').length ? 'pageCSS/.zin-page-css>*,pageJS/.zin-page-js,#main>*,hookCode(),#configJS,title>*,#heading>*,#navbar>*,#pageToolbar>*' : 'body>*,title>*,#configJS'; if(selector[0] === '+') return getLoadSelector() + ',' + selector.substring(1); return selector; } @@ -766,7 +767,7 @@ const isInModal = $(target).closest('.modal').length; if(!isInModal && !options.selector) { - selector += ',#mainMenu>*,pageJS/.zin-page-js,hookCode()'; + selector = 'pageJS/.zin-page-js,' + selector + ',#mainMenu>*,hookCode()'; if($('#moduleMenu').length) selector += ',#moduleMenu,.module-menu-header'; if($('#docDropmenu').length) selector += ',#docDropmenu,.module-menu'; } @@ -1454,6 +1455,14 @@ else $(document).trigger('locate.zt', data.cancelled); }); } + if(data.alert) + { + return zui.Modal.alert(data.alert).then(function() + { + if(data.modal) loadModal(data.modal); + if(data.locate) openUrl(data.locate); + }); + } if(data.load) return openUrl(data); if(data.app) return openPage(data.url + (data.selector ? (' ' + data.selector) : ''), data.app); loadPage(data); diff --git a/www/js/zui3/zui.zentao.css b/www/js/zui3/zui.zentao.css index 7df4bf4e4c..0e3411a3cb 100644 --- a/www/js/zui3/zui.zentao.css +++ b/www/js/zui3/zui.zentao.css @@ -1,2 +1,2 @@ -/*! 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-article:0.875rem;--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;--article-p-space:0.5em;--article-heading-space:0.5em;--article-hr-space:1.5em;--article-cell-padding:0.25rem 0.75rem}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{color:var(--font-size-article)}.article h1,.article h2,.article h3,.article h4{margin-bottom:var(--article-heading-space);margin-top:var(--article-heading-space)}.article audio,.article blockquote,.article figure,.article img,.article ol,.article p,.article table,.article ul,.article video{margin-bottom:var(--article-p-space);margin-top:var(--article-p-space)}.article hr{margin-bottom:var(--article-hr-space);margin-top:var(--article-hr-space)}.article table{border-width:1px}.article td,.article th{border-bottom-width:1px;padding:var(--article-cell-padding)}.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{align-items:flex-start;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:.25rem;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:rgba(var(--color-canvas-rgb),.1);--label-border-color:var(--color-gray-300);--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;justify-content:center;line-height:1rem;min-width:1.25rem;padding-left:.25rem;padding-right:.25rem;white-space:pre-line}.label.size-lg{font-size:.8125rem;height:1.5rem;line-height:1.25rem;min-width:1.5rem;padding-left:.5rem;padding-right:.5rem}.label.size-sm{height:1rem;min-width: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{align-items:center;display:inline-flex;height:.75rem;justify-content:center;position:relative;width:.75rem}.caret-down:before,.caret-left:before,.caret-right:before,.caret-up:before,.caret:before{--tw-translate-y:-1px;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.35rem;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:.35rem}.caret-left:before{--tw-translate-x:0.125rem;--tw-translate-y:0px;--tw-rotate:135deg}.caret-left:before,.caret-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))}.caret-right:before{--tw-translate-x:-0.125rem;--tw-translate-y:0px;--tw-rotate:-45deg}.caret-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))}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}.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?v=1.65);src:url(./icons/ZentaoIcon.woff?v=1.65) format("woff"),url(./icons/ZentaoIcon.ttf?v=1.65) format("truetype"),url(./icons/ZentaoIcon.svg?v=1.65#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-board:before{content:"\ea15"}.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-treeview:before{content:"\ea0d"}.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-cell-input:before{content:"\ea0e"}.icon-input:before{content:"\ea0f"}.icon-checkbox:before{content:"\ea10"}.icon-radio:before{content:"\ea11"}.icon-transition:before{content:"\ea12"}.icon-add-sub-chapter:before{content:"\ea13"}.icon-add-chapter:before{content:"\ea14"}.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:var(--color-primary-100);--nav-active-color:var(--color-fore)}.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>a>.text{white-space:nowrap}.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(--opacity-disabled)}.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-compact{gap:.25rem}.nav-compact .nav-item{gap:.5rem}.nav-compact .nav-item>a{height:1.75rem;padding-left:.5rem;padding-right:.5rem}.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;position:relative;z-index:1}.popover-title{flex:1 1 auto;font-weight:700}.popover-content{padding:.75rem;position:relative;z-index:1}.popover-arrow{z-index:0}.has-heading>.popover-arrow.arrow-top,.has-heading>.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;z-index:2}.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;--sidebar-duration:200ms;flex:none!important;position:relative}.has-sidebar-animation .sidebar{transition-duration:.15s;transition-duration:var(--sidebar-duration);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>*,.sidebar.is-expanded.is-animating>*{display:none}.sidebar.is-collapsed>.sidebar-gutter{display:flex!important}.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}:root{--tooltip-bg:var(--skin-color,var(--color-inverse));--tooltip-text:var(--skin-text,var(--color-canvas));--tooltip-arrow:6px;--tooltip-delay:0.5s}.hint,[class*=" hint-"],[class^=hint-]{position:relative}.hint:before,[class*=" hint-"]:before,[class^=hint-]:before{--tw-content:"";border-color:var(--tooltip-bg) transparent transparent transparent;border-style:solid;border-width:var(--tooltip-arrow) var(--tooltip-arrow) 0 var(--tooltip-arrow);content:var(--tw-content);height:0;margin-bottom:calc(0px - var(--tooltip-arrow));position:absolute;width:0}.hint:after,[class*=" hint-"]:after,[class^=hint-]:after{--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);--tw-content:attr(data-hint);background-color:var(--tooltip-bg);border-color:var(--tooltip-color);border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--tooltip-text);content:var(--tw-content);font-size:.75rem;line-height:1rem;max-width:28rem;overflow:hidden;padding:.25rem .5rem;position:absolute;text-shadow:0 1px 0 var(--tooltip-bg);white-space:nowrap}.hint:after,.hint:before,[class*=" hint-"]:after,[class*=" hint-"]:before,[class^=hint-]:after,[class^=hint-]:before{--tw-translate-x:-50%;--tw-translate-y:calc(var(--tooltip-arrow)*-1);bottom:100%;left:50%;opacity:0;pointer-events:none;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-delay:0s;transition-duration:.15s;transition-property:opacity,visibility;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,1,1);visibility:hidden;z-index:1800}.hint:hover:after,.hint:hover:before,[class*=" hint-"]:hover:after,[class*=" hint-"]:hover:before,[class^=hint-]:hover:after,[class^=hint-]:hover:before{opacity:1;transition-delay:var(--tooltip-delay);visibility:visible}.hint-bottom:before{border-color:transparent transparent var(--tooltip-bg) transparent;border-width:0 var(--tooltip-arrow) var(--tooltip-arrow) var(--tooltip-arrow);margin-bottom:auto;margin-top:calc(0px - var(--tooltip-arrow))}.hint-bottom:after,.hint-bottom:before{--tw-translate-y:var(--tooltip-arrow);bottom:auto;top:100%;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))}.hint-left:before{border-color:transparent transparent transparent var(--tooltip-bg);border-width:var(--tooltip-arrow) 0 var(--tooltip-arrow) var(--tooltip-arrow);margin-bottom:auto;margin-right:calc(0px - var(--tooltip-arrow))}.hint-left:after,.hint-left:before{--tw-translate-x:calc(var(--tooltip-arrow)*-1);--tw-translate-y:50%;bottom:50%;left:auto;right:100%;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))}.hint-right:before{border-color:transparent var(--tooltip-bg) transparent;border-width:var(--tooltip-arrow) var(--tooltip-arrow) var(--tooltip-arrow) 0;margin-bottom:auto;margin-left:calc(0px - var(--tooltip-arrow))}.hint-right:after,.hint-right:before{--tw-translate-x:var(--tooltip-arrow);--tw-translate-y:50%;bottom:50%;left:100%;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))}.hint-lg:after,.hint-sm -.hint-md:after:after,.hint-xl:after{white-space:normal;word-break:break-all}.hint-sm:after{width:4rem}.hint-md:after{width:8rem}.hint-lg:after{width:16rem}.hint-xl:after{width:24rem}.hint-primary{--tooltip-bg:var(--color-primary-500)}.hint-success{--tooltip-bg:var(--color-success-500)}.hint-danger{--tooltip-bg:var(--color-danger-500)}.hint-warning{--tooltip-bg:var(--color-warning-500)}.hint-important{--tooltip-bg:var(--color-important-500)}.hint-special{--tooltip-bg:var(--color-special-500)}.tooltip{background-color:var(--tooltip-bg);border-color:var(--tooltip-color);border-radius:var(--radius);color:var(--tooltip-text);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}.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{padding-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,.tree-item-inner.is-link:hover .label{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:3}.panel-form .form-grid{margin-left:calc(0px - var(--form-grid-gap-y-half));margin-right:calc(0px - var(--form-grid-gap-y-half));padding-bottom:0}.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,.no-foldable-items .btn-toggle-fold{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.25rem;z-index:2}.modal-body>.panel-form .form-actions{bottom:-1.5rem!important;padding-bottom:1.5rem;padding-top: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}.dropdown>.menu-wrapper.is-tree .menu-wrapper{position:relative}.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{flex-direction:row;justify-content:flex-start;position:relative}.pick-pri,.pick-pri>.text{align-items:center;display:flex}.pick-pri>.text{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap}.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:.5rem}.search-form-container{--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);--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));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: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}.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),.1);border-bottom-width:1px}.dtable-has-scroll-y:not(.dtable-scrolled-bottom) .dtable-footer{border-top-color:rgba(var(--color-inverse-rgb),.1);border-top-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-checked-bg:var(--color-primary-50);--dtable-checked-bg-hover:var(--color-primary-100);--dtable-hover-bg:rgba(var(--color-gray-500-rgb),.05);--dtable-link-color:var(--color-link);--dtable-link-hover-color:var(--color-link-hover);--dtable-link-visited-color:var(--color-link-visited)}.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-nested-toggle{width:1rem}.dtable .toggle-icon{--toggle-icon-size:11px;--tw-border-opacity:1;border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity));border-radius:var(--radius)}.dtable .toggle-icon:after,.dtable .toggle-icon:before{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-700-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{--dtable-link-color:var(--color-fore);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{--dtable-link-color:var(--color-warning-500)}.dtable-assign-btn:hover{--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-opacity:1;--tw-ring-color:rgba(var(--color-border-strong-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.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-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(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-strong-rgb),var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.dtable-assign-btn.is-unassigned:hover>span{--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:inherit;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);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.has-icons{--menu-icon-opacity:1;align-items:center;display:flex;gap:.25rem;min-width:auto}.menu.menu-dtable-actions.has-icons>.menu-item>a{padding-left:.25rem;padding-right:.25rem}.menu.menu-dtable-actions.has-icons>.menu-item>a>.icon-EMPTY,.menu.menu-dtable-actions.has-icons>.menu-item>a>.item-content{display:none}.menu.menu-dtable-actions.has-icons>.menu-item>a>.icon-EMPTY+.item-content,.menu.menu-dtable-actions.has-icons>.menu-item>a>.item-content:first-child{display:block}:root{--state-color:rgba(0,0,0,.03);--zt-page-bg:#f8f9fa;--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}#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-content,.modal-dialog{max-height:calc(100vh - 4rem)}.modal-body,.modal-footer,.modal-header{padding:1.5rem 2rem}.modal-header{padding-right:3rem}.modal-body+.modal-footer,.modal-header+.modal-actions+.modal-body,.modal-header+.modal-body{padding-top:1px}.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-body>.panel-form{margin:0;padding:0}.modal-body>.panel-form>.panel-heading{padding-left:1px;padding-right:1px;padding-top:1px}.modal-body>.panel-form>.panel-body{padding:1px}.modal-body>.form{padding-top:1px}.modal .history,.modal .panel-body>.form{padding:0}:root{--article-p-space: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{align-items:center;display:inline-flex;height:.75rem;justify-content:center;position:relative;width:.75rem}.caret-down:before,.caret-left:before,.caret-right:before,.caret-up:before,.caret:before{--tw-translate-y:-1px;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.35rem;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:.35rem}.caret-left:before{--tw-translate-x:0.125rem;--tw-translate-y:0px;--tw-rotate:135deg}.caret-left:before,.caret-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))}.caret-right:before{--tw-translate-x:-0.125rem;--tw-translate-y:0px;--tw-rotate:-45deg}.caret-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))}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}: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-1{z-index:1}.z-5{z-index:5}.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}.z-base{z-index:1100}.z-above{z-index:50}.z-below{z-index:-50}.z-dropdown{z-index:1200}.z-sticky{z-index:1300}.z-fixed{z-index:1400}.z-modal{z-index:1500}.z-overlay{z-index:1600}.z-popover{z-index:1700}.z-tooltip{z-index:1800}.z-messager{z-index:1900}.m-0{margin:0}.m-auto{margin:auto}.m-px{margin:1px}.m-0\.5{margin:.125rem}.m-1{margin:.25rem}.m-1\.5{margin:.375rem}.m-2{margin:.5rem}.m-2\.5{margin:.625rem}.m-3{margin:.75rem}.m-3\.5{margin:.875rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-7{margin:1.75rem}.m-8{margin:2rem}.m-9{margin:2.25rem}.m-10{margin:2.5rem}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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-screen{max-height:100vh}.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,.dark-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.light-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,.dark-outline:hover,.gray-300-outline:hover,.gray-400-outline:hover,.gray-600-outline:hover,.gray-outline:hover,.important-outline:hover,.light-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,.dark-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.light-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)}.dark-outline{--skin-outline-rgb:var(--color-inverse-rgb)}.light-outline{--skin-outline-rgb:var(--color-canvas-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-clamp-1{-webkit-line-clamp:1}.line-clamp-1,.line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2}.line-clamp-3{-webkit-line-clamp:3}.line-clamp-3,.line-clamp-4{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-4{-webkit-line-clamp:4}.line-clamp-5{-webkit-line-clamp:5}.line-clamp-5,.line-clamp-6{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-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)}.transition-none{transition-property:none}.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-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-article:0.875rem;--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;--article-p-space:0.5em;--article-heading-space:0.5em;--article-hr-space:1.5em;--article-cell-padding:0.25rem 0.75rem}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{color:var(--font-size-article)}.article h1,.article h2,.article h3,.article h4{margin-bottom:var(--article-heading-space);margin-top:var(--article-heading-space)}.article audio,.article blockquote,.article figure,.article img,.article ol,.article p,.article table,.article ul,.article video{margin-bottom:var(--article-p-space);margin-top:var(--article-p-space)}.article hr{margin-bottom:var(--article-hr-space);margin-top:var(--article-hr-space)}.article table{border-width:1px}.article td,.article th{border-bottom-width:1px;padding:var(--article-cell-padding)}.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{align-items:flex-start;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:.25rem;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:rgba(var(--color-canvas-rgb),.1);--label-border-color:var(--color-gray-300);--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;justify-content:center;line-height:1rem;min-width:1.25rem;padding-left:.25rem;padding-right:.25rem;white-space:pre-line}.label.size-lg{font-size:.8125rem;height:1.5rem;line-height:1.25rem;min-width:1.5rem;padding-left:.5rem;padding-right:.5rem}.label.size-sm{height:1rem;min-width: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{align-items:center;display:inline-flex;height:.75rem;justify-content:center;position:relative;width:.75rem}.caret-down:before,.caret-left:before,.caret-right:before,.caret-up:before,.caret:before{--tw-translate-y:-1px;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.35rem;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:.35rem}.caret-left:before{--tw-translate-x:0.125rem;--tw-translate-y:0px;--tw-rotate:135deg}.caret-left:before,.caret-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))}.caret-right:before{--tw-translate-x:-0.125rem;--tw-translate-y:0px;--tw-rotate:-45deg}.caret-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))}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}.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:var(--scrollbar-visibility,hidden)}.scrollbar-hover:hover::-webkit-scrollbar,.scrollbar-hover:hover::-webkit-scrollbar-thumb,.scrollbar-hover:hover::-webkit-scrollbar-track{visibility:var(--scrollbar-visibility,visible)}@font-face{font-family:ZentaoIcon;font-style:normal;font-weight:400;src:url(./icons/ZentaoIcon.eot?v=1.65);src:url(./icons/ZentaoIcon.woff?v=1.65) format("woff"),url(./icons/ZentaoIcon.ttf?v=1.65) format("truetype"),url(./icons/ZentaoIcon.svg?v=1.65#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-board:before{content:"\ea15"}.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-treeview:before{content:"\ea0d"}.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-cell-input:before{content:"\ea0e"}.icon-input:before{content:"\ea0f"}.icon-checkbox:before{content:"\ea10"}.icon-radio:before{content:"\ea11"}.icon-transition:before{content:"\ea12"}.icon-add-sub-chapter:before{content:"\ea13"}.icon-add-chapter:before{content:"\ea14"}.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:var(--color-primary-100);--nav-active-color:var(--color-fore)}.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>a>.text{white-space:nowrap}.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(--opacity-disabled)}.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-compact{gap:.25rem}.nav-compact .nav-item{gap:.5rem}.nav-compact .nav-item>a{height:1.75rem;padding-left:.5rem;padding-right:.5rem}.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;position:relative;z-index:1}.popover-title{flex:1 1 auto;font-weight:700}.popover-content{padding:.75rem;position:relative;z-index:1}.popover-arrow{z-index:0}.has-heading>.popover-arrow.arrow-top,.has-heading>.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;z-index:2}.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;--sidebar-duration:200ms;flex:none!important;position:relative}.has-sidebar-animation .sidebar{transition-duration:.15s;transition-duration:var(--sidebar-duration);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>*,.sidebar.is-expanded.is-animating>*{display:none}.sidebar.is-collapsed>.sidebar-gutter{display:flex!important}.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}:root{--tooltip-bg:var(--skin-color,var(--color-inverse));--tooltip-text:var(--skin-text,var(--color-canvas));--tooltip-arrow:6px;--tooltip-delay:0.5s}.hint,[class*=" hint-"],[class^=hint-]{position:relative}.hint:before,[class*=" hint-"]:before,[class^=hint-]:before{--tw-content:"";border-color:var(--tooltip-bg) transparent transparent transparent;border-style:solid;border-width:var(--tooltip-arrow) var(--tooltip-arrow) 0 var(--tooltip-arrow);content:var(--tw-content);height:0;margin-bottom:calc(0px - var(--tooltip-arrow));position:absolute;width:0}.hint:after,[class*=" hint-"]:after,[class^=hint-]:after{--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);--tw-content:attr(data-hint);background-color:var(--tooltip-bg);border-color:var(--tooltip-color);border-radius:var(--radius);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--tooltip-text);content:var(--tw-content);font-size:.75rem;line-height:1rem;max-width:28rem;overflow:hidden;padding:.25rem .5rem;position:absolute;text-shadow:0 1px 0 var(--tooltip-bg);white-space:nowrap}.hint:after,.hint:before,[class*=" hint-"]:after,[class*=" hint-"]:before,[class^=hint-]:after,[class^=hint-]:before{--tw-translate-x:-50%;--tw-translate-y:calc(var(--tooltip-arrow)*-1);bottom:100%;left:50%;opacity:0;pointer-events:none;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-delay:0s;transition-duration:.15s;transition-property:opacity,visibility;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,1,1);visibility:hidden;z-index:1800}.hint:hover:after,.hint:hover:before,[class*=" hint-"]:hover:after,[class*=" hint-"]:hover:before,[class^=hint-]:hover:after,[class^=hint-]:hover:before{opacity:1;transition-delay:var(--tooltip-delay);visibility:visible}.hint-bottom:before{border-color:transparent transparent var(--tooltip-bg) transparent;border-width:0 var(--tooltip-arrow) var(--tooltip-arrow) var(--tooltip-arrow);margin-bottom:auto;margin-top:calc(0px - var(--tooltip-arrow))}.hint-bottom:after,.hint-bottom:before{--tw-translate-y:var(--tooltip-arrow);bottom:auto;top:100%;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))}.hint-left:before{border-color:transparent transparent transparent var(--tooltip-bg);border-width:var(--tooltip-arrow) 0 var(--tooltip-arrow) var(--tooltip-arrow);margin-bottom:auto;margin-right:calc(0px - var(--tooltip-arrow))}.hint-left:after,.hint-left:before{--tw-translate-x:calc(var(--tooltip-arrow)*-1);--tw-translate-y:50%;bottom:50%;left:auto;right:100%;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))}.hint-right:before{border-color:transparent var(--tooltip-bg) transparent;border-width:var(--tooltip-arrow) var(--tooltip-arrow) var(--tooltip-arrow) 0;margin-bottom:auto;margin-left:calc(0px - var(--tooltip-arrow))}.hint-right:after,.hint-right:before{--tw-translate-x:var(--tooltip-arrow);--tw-translate-y:50%;bottom:50%;left:100%;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))}.hint-lg:after,.hint-sm +.hint-md:after:after,.hint-xl:after{white-space:normal;word-break:break-all}.hint-sm:after{width:4rem}.hint-md:after{width:8rem}.hint-lg:after{width:16rem}.hint-xl:after{width:24rem}.hint-primary{--tooltip-bg:var(--color-primary-500)}.hint-success{--tooltip-bg:var(--color-success-500)}.hint-danger{--tooltip-bg:var(--color-danger-500)}.hint-warning{--tooltip-bg:var(--color-warning-500)}.hint-important{--tooltip-bg:var(--color-important-500)}.hint-special{--tooltip-bg:var(--color-special-500)}.tooltip{background-color:var(--tooltip-bg);border-color:var(--tooltip-color);border-radius:var(--radius);color:var(--tooltip-text);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}.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{padding-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,.tree-item-inner.is-link:hover .label{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:3}.panel-form .form-grid{margin-left:calc(0px - var(--form-grid-gap-y-half));margin-right:calc(0px - var(--form-grid-gap-y-half));padding-bottom:0}.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,.no-foldable-items .btn-toggle-fold{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.25rem;z-index:2}.modal-body>.panel-form .form-actions{bottom:-1.5rem!important;padding-bottom:1.5rem;padding-top: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}.dropdown>.menu-wrapper.is-tree .menu-wrapper{position:relative}.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{flex-direction:row;justify-content:flex-start;position:relative}.pick-pri,.pick-pri>.text{align-items:center;display:flex}.pick-pri>.text{flex:1 1 auto;min-width:0;overflow:hidden;white-space:nowrap}.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:.5rem}.search-form-container{--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);--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));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: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}.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),.1);border-bottom-width:1px}.dtable-has-scroll-y:not(.dtable-scrolled-bottom) .dtable-footer{border-top-color:rgba(var(--color-inverse-rgb),.1);border-top-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}.scrollbar-hover:hover .scrollbar{opacity:0}.scrollbar-hover.dtable-hover .scrollbar{opacity:var(--scrollbar-opacity)}.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-checked-bg:var(--color-primary-50);--dtable-checked-bg-hover:var(--color-primary-100);--dtable-hover-bg:rgba(var(--color-gray-500-rgb),.05);--dtable-link-color:var(--color-link);--dtable-link-hover-color:var(--color-link-hover);--dtable-link-visited-color:var(--color-link-visited)}.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-nested-toggle{width:1rem}.dtable .toggle-icon{--toggle-icon-size:11px;--tw-border-opacity:1;border-color:rgba(var(--color-gray-400-rgb),var(--tw-border-opacity));border-radius:var(--radius)}.dtable .toggle-icon:after,.dtable .toggle-icon:before{--tw-bg-opacity:1;background-color:rgba(var(--color-gray-700-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{--dtable-link-color:var(--color-fore);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{--dtable-link-color:var(--color-warning-500)}.dtable-assign-btn:hover{--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-opacity:1;--tw-ring-color:rgba(var(--color-border-strong-rgb),var(--tw-ring-opacity));background-color:rgba(var(--color-canvas-rgb),var(--tw-bg-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.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-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(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);--tw-ring-opacity:1;--tw-ring-color:rgba(var(--color-border-strong-rgb),var(--tw-ring-opacity));box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);color:rgba(var(--color-gray-500-rgb),var(--tw-text-opacity))}.dtable-assign-btn.is-unassigned:hover>span{--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:inherit;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);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.has-icons{--menu-icon-opacity:1;align-items:center;display:flex;gap:.25rem;min-width:auto}.menu.menu-dtable-actions.has-icons>.menu-item>a{padding-left:.25rem;padding-right:.25rem}.menu.menu-dtable-actions.has-icons>.menu-item>a>.icon-EMPTY,.menu.menu-dtable-actions.has-icons>.menu-item>a>.item-content{display:none}.menu.menu-dtable-actions.has-icons>.menu-item>a>.icon-EMPTY+.item-content,.menu.menu-dtable-actions.has-icons>.menu-item>a>.item-content:first-child{display:block}:root{--state-color:rgba(0,0,0,.03);--zt-page-bg:#f8f9fa;--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}#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-content,.modal-dialog{max-height:calc(100vh - 4rem)}.modal-body,.modal-footer,.modal-header{padding:1.5rem 2rem}.modal-header{padding-right:3rem}.modal-body+.modal-footer,.modal-header+.modal-actions+.modal-body,.modal-header+.modal-body{padding-top:1px}.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-body>.panel-form{margin:0;padding:0}.modal-body>.panel-form>.panel-heading{padding-left:1px;padding-right:1px;padding-top:1px}.modal-body>.panel-form>.panel-body{padding:1px}.modal-body>.form{padding-top:1px}.modal .history,.modal .panel-body>.form{padding:0}:root{--article-p-space: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{align-items:center;display:inline-flex;height:.75rem;justify-content:center;position:relative;width:.75rem}.caret-down:before,.caret-left:before,.caret-right:before,.caret-up:before,.caret:before{--tw-translate-y:-1px;--tw-rotate:45deg;--tw-content:"";border-color:currentColor;border-width:0 1px 1px 0;content:var(--tw-content);display:block;height:.35rem;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:.35rem}.caret-left:before{--tw-translate-x:0.125rem;--tw-translate-y:0px;--tw-rotate:135deg}.caret-left:before,.caret-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))}.caret-right:before{--tw-translate-x:-0.125rem;--tw-translate-y:0px;--tw-rotate:-45deg}.caret-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))}:focus>.caret,:hover>.caret{opacity:inherit}.disabled .caret,.readonly .caret{opacity:var(--caret-opacity,.5)}: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-1{z-index:1}.z-5{z-index:5}.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}.z-base{z-index:1100}.z-above{z-index:50}.z-below{z-index:-50}.z-dropdown{z-index:1200}.z-sticky{z-index:1300}.z-fixed{z-index:1400}.z-modal{z-index:1500}.z-overlay{z-index:1600}.z-popover{z-index:1700}.z-tooltip{z-index:1800}.z-messager{z-index:1900}.m-0{margin:0}.m-auto{margin:auto}.m-px{margin:1px}.m-0\.5{margin:.125rem}.m-1{margin:.25rem}.m-1\.5{margin:.375rem}.m-2{margin:.5rem}.m-2\.5{margin:.625rem}.m-3{margin:.75rem}.m-3\.5{margin:.875rem}.m-4{margin:1rem}.m-5{margin:1.25rem}.m-6{margin:1.5rem}.m-7{margin:1.75rem}.m-8{margin:2rem}.m-9{margin:2.25rem}.m-10{margin:2.5rem}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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}.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-screen{max-height:100vh}.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,.dark-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.light-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,.dark-outline:hover,.gray-300-outline:hover,.gray-400-outline:hover,.gray-600-outline:hover,.gray-outline:hover,.important-outline:hover,.light-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,.dark-outline,.gray-300-outline,.gray-400-outline,.gray-600-outline,.gray-outline,.important-outline,.light-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)}.dark-outline{--skin-outline-rgb:var(--color-inverse-rgb)}.light-outline{--skin-outline-rgb:var(--color-canvas-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-clamp-1{-webkit-line-clamp:1}.line-clamp-1,.line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2}.line-clamp-3{-webkit-line-clamp:3}.line-clamp-3,.line-clamp-4{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-4{-webkit-line-clamp:4}.line-clamp-5{-webkit-line-clamp:5}.line-clamp-5,.line-clamp-6{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-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)}.transition-none{transition-property:none}.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-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 0d53de03d7..0c4e2dfafd 100644 --- a/www/js/zui3/zui.zentao.js +++ b/www/js/zui3/zui.zentao.js @@ -1,3 +1,3 @@ -var Ao=(w,tt,vt)=>{if(!tt.has(w))throw TypeError("Cannot "+vt)};var bt=(w,tt,vt)=>(Ao(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,mi)=>(Ao(w,tt,"write to private field"),mi?mi.call(w,vt):tt.set(w,vt),vt);var Do=(w,tt,vt)=>(Ao(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 di,ui,Ls,Rs,Fs,zs,Os,Ws,fi,Vc,pi,Kc,ye,_e;"use strict";const tt="",vt="",mi="",Bf="",jf="",Uf="",Vf="",Kf="",Gf="",qf="",Yf="",Qf="",Gc="3.0.0-alpha.4",jt=document,Hs=window,Lo=jt.documentElement,be=jt.createElement.bind(jt),Ro=be("div"),gi=be("table"),qc=be("tbody"),Fo=be("tr"),{isArray:Bs,prototype:zo}=Array,{concat:Yc,filter:yi,indexOf:Oo,map:Wo,push:Qc,slice:Ho,some:_i,splice:Zc}=zo,Xc=/^#(?:[\w-]|\\.|[^\x00-\xa0])*$/,Jc=/^\.(?:[\w-]|\\.|[^\x00-\xa0])*$/,th=/<.+>/,eh=/^\w+$/;function bi(n,t){const e=sh(t);return!n||!e&&!ve(t)&&!nt(t)?[]:!e&&Jc.test(n)?t.getElementsByClassName(n.slice(1).replace(/\\/g,"")):!e&&eh.test(n)?t.getElementsByTagName(n):t.querySelectorAll(n)}class js{constructor(t,e){if(!t)return;if(vi(t))return t;let s=t;if(dt(t)){const i=e||jt;if(s=Xc.test(t)&&ve(i)?i.getElementById(t.slice(1).replace(/\\/g,"")):th.test(t)?Go(t):vi(i)?i.find(t):dt(i)?u(i).find(t):bi(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=ih(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{nt(r)&<(e,(o,a)=>{s?t?r.classList.add(a):r.classList.remove(a):r.classList.toggle(a)})})},M.addClass=function(n){return this.toggleClass(n,!0)},M.removeAttr=function(n){const t=Vs(n);return this.each((e,s)=>{nt(s)&<(t,(i,r)=>{s.removeAttribute(r)})})};function oh(n,t){if(n){if(dt(n)){if(arguments.length<2){if(!this[0]||!nt(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)=>{nt(s)&&s.setAttribute(n,t)})}for(const e in n)this.attr(e,n[e]);return this}}M.attr=oh,M.removeClass=function(n){return arguments.length?this.toggleClass(n,!1):this.attr("class","")},M.hasClass=function(n){return!!n&&_i.call(this,t=>nt(t)&&t.classList.contains(n))},M.get=function(n){return wt(n)?Ho.call(this):(n=Number(n),this[n<0?n+this.length:n])},M.eq=function(n){return u(this.get(n))},M.first=function(){return this.eq(0)},M.last=function(){return this.eq(-1)};function ah(n){return wt(n)?this.get().map(t=>nt(t)||nh(t)?t.textContent:"").join(""):this.each((t,e)=>{nt(e)&&(e.textContent=n)})}M.text=ah;function Ut(n,t,e){if(!nt(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 jo(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 Ci={};function lh(n){if(Ci[n])return Ci[n];const t=be(n);jt.body.insertBefore(t,null);const e=Ut(t,"display");return jt.body.removeChild(t),Ci[n]=e!=="none"?e:"block"}function Uo(n){return Ut(n,"display")==="none"}function Vo(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)=>Vo(e,n):we(n)?n:vi(n)?(t,e)=>n.is(e):n?(t,e)=>e===n:()=>!1}M.filter=function(n){const t=Ks(n);return u(yi.call(this,(e,s)=>t.call(e,s,e)))};function se(n,t){return t?n.filter(t):n}M.detach=function(n){return se(this,n).each((t,e)=>{e.parentNode&&e.parentNode.removeChild(e)}),this};const ch=/^\s*<(\w+)[^>]*>/,hh=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,Ko={"*":Ro,tr:qc,td:Fo,th:Fo,thead:gi,tbody:gi,tfoot:gi};function Go(n){if(!dt(n))return[];if(hh.test(n))return[be(RegExp.$1)];const t=ch.test(n)&&RegExp.$1,e=Ko[t]||Ko["*"];return e.innerHTML=n,u(e.childNodes).detach().get()}u.parseHTML=Go,M.has=function(n){const t=dt(n)?(e,s)=>bi(n,s).length:(e,s)=>s.contains(n);return this.filter(t)},M.not=function(n){const t=Ks(n);return this.filter((e,s)=>(!dt(n)||nt(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 dh(n){return arguments.length?this.each((t,e)=>{const s=e.multiple&&e.options;if(s||ra.test(e.type)){const i=Bs(n)?Wo.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]&&qo(this[0])}M.val=dh,M.is=function(n){const t=Ks(n);return _i.call(this,(e,s)=>t.call(e,s,e))},u.guid=1;function Ot(n){return n.length>1?yi.call(n,(t,e,s)=>Oo.call(s,t)===e):n}u.unique=Ot,M.add=function(n,t){return u(Ot(this.get().concat(u(n,t).get())))},M.children=function(n){return se(u(Ot(Vt(this,t=>t.children))),n)},M.parent=function(n){return se(u(Ot(Vt(this,"parentNode"))),n)},M.index=function(n){const t=n?u(n)[0]:this[0],e=n?this:u(t).parent().children();return Oo.call(e,t)},M.closest=function(n){const t=this.filter(n);if(t.length)return t;const e=this.parent();return e.length?e.closest(n):t},M.siblings=function(n){return se(u(Ot(Vt(this,t=>u(t).parent().children().not(t)))),n)},M.find=function(n){return u(Ot(Vt(this,t=>bi(n,t))))};const uh=/^\s*\s*$/g,fh=/^$|^module$|\/(java|ecma)script/i,ph=["type","src","nonce","noModule"];function mh(n,t){const e=u(n);e.filter("script").add(e.find("script")).each((s,i)=>{if(fh.test(i.type)&&Lo.contains(i)){const r=be("script");r.text=i.textContent.replace(uh,""),lt(ph,(o,a)=>{i[a]&&(r[a]=i[a])}),t.head.insertBefore(r,null),t.head.removeChild(r)}})}function gh(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&&mh(t,n.ownerDocument)}function ne(n,t,e,s,i,r,o,a){return lt(n,(l,c)=>{lt(u(c),(h,d)=>{lt(u(t),(p,f)=>{const g=e?d:f,y=e?f:d,_=e?h:p;gh(g,_?y.cloneNode(!0):y,s,i,!_)},a)},o)},r),t}M.after=function(){return ne(arguments,this,!1,!1,!1,!0,!0)},M.append=function(){return ne(arguments,this,!1,!1,!0)};function yh(n){if(!arguments.length)return this[0]&&this[0].innerHTML;if(wt(n))return this;const t=/]/.test(n);return this.each((e,s)=>{nt(s)&&(t?u(s).empty().append(n):s.innerHTML=n)})}M.html=yh,M.appendTo=function(n){return ne(arguments,this,!0,!1,!0)},M.wrapInner=function(n){return this.each((t,e)=>{const s=u(e),i=s.contents();i.length?i.wrapAll(n):s.append(n)})},M.before=function(){return ne(arguments,this,!1,!0)},M.wrapAll=function(n){let t=u(n),e=t[0];for(;e.children.length;)e=e.firstElementChild;return this.first().before(t),this.appendTo(e)},M.wrap=function(n){return this.each((t,e)=>{const s=u(n)[0];u(e).wrapAll(t?s.cloneNode(!0):s)})},M.insertAfter=function(n){return ne(arguments,this,!0,!1,!1,!1,!1,!0)},M.insertBefore=function(n){return ne(arguments,this,!0,!0)},M.prepend=function(){return ne(arguments,this,!1,!0,!0,!0,!0)},M.prependTo=function(n){return ne(arguments,this,!0,!0,!0,!1,!1,!0)},M.contents=function(){return u(Ot(Vt(this,n=>n.tagName==="IFRAME"?[n.contentDocument]:n.tagName==="TEMPLATE"?n.content.childNodes:n.childNodes)))},M.next=function(n,t,e){return se(u(Ot(Vt(this,"nextElementSibling",t,e))),n)},M.nextAll=function(n){return this.next(n,!0)},M.nextUntil=function(n,t){return this.next(t,!0,n)},M.parents=function(n,t){return se(u(Ot(Vt(this,"parentElement",!0,t))),n)},M.parentsUntil=function(n,t){return this.parents(t,n)},M.prev=function(n,t,e){return se(u(Ot(Vt(this,"previousElementSibling",t,e))),n)},M.prevAll=function(n){return this.prev(n,!0)},M.prevUntil=function(n,t){return this.prev(t,!0,n)},M.map=function(n){return u(Yc.apply([],Wo.call(this,(t,e)=>n.call(t,e,t))))},M.clone=function(){return this.map((n,t)=>t.cloneNode(!0))},M.offsetParent=function(){return this.map((n,t)=>{let e=t.offsetParent;for(;e&&Ut(e,"position")==="static";)e=e.offsetParent;return e||Lo})},M.slice=function(n,t){return u(Ho.call(this,n,t))};const _h=/-([a-z])/g;function ki(n){return n.replace(_h,(t,e)=>e.toUpperCase())}M.ready=function(n){const t=()=>setTimeout(n,0,u);return jt.readyState!=="loading"?t():jt.addEventListener("DOMContentLoaded",t),this},M.unwrap=function(){return this.parent().each((n,t)=>{if(t.tagName==="BODY")return;const e=u(t);e.replaceWith(e.children())}),this},M.offset=function(){const n=this[0];if(!n)return;const t=n.getBoundingClientRect();return{top:t.top+Hs.pageYOffset,left:t.left+Hs.pageXOffset}},M.position=function(){const n=this[0];if(!n)return;const t=Ut(n,"position")==="fixed",e=t?n.getBoundingClientRect():this.offset();if(!t){const s=n.ownerDocument;let i=n.offsetParent||s.documentElement;for(;(i===s.body||i===s.documentElement)&&Ut(i,"position")==="static";)i=i.parentNode;if(i!==n&&nt(i)){const r=u(i).offset();e.top-=r.top+zt(i,"borderTopWidth"),e.left-=r.left+zt(i,"borderLeftWidth")}}return{top:e.top-zt(n,"marginTop"),left:e.left-zt(n,"marginLeft")}};const Yo={class:"className",contenteditable:"contentEditable",for:"htmlFor",readonly:"readOnly",maxlength:"maxLength",tabindex:"tabIndex",colspan:"colSpan",rowspan:"rowSpan",usemap:"useMap"};M.prop=function(n,t){if(n){if(dt(n))return n=Yo[n]||n,arguments.length<2?this[0]&&this[0][n]:this.each((e,s)=>{s[n]=t});for(const e in n)this.prop(e,n[e]);return this}},M.removeProp=function(n){return this.each((t,e)=>{delete e[Yo[n]||n]})};const bh=/^--/;function xi(n){return bh.test(n)}const Si={},{style:vh}=Ro,wh=["webkit","moz","ms"];function Ch(n,t=xi(n)){if(t)return n;if(!Si[n]){const e=ki(n),s=`${e[0].toUpperCase()}${e.slice(1)}`,i=`${e} ${wh.join(`${s} `)}${s}`.split(" ");lt(i,(r,o)=>{if(o in vh)return Si[n]=o,!1})}return Si[n]}const kh={animationIterationCount:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0};function Qo(n,t,e=xi(n)){return!e&&!kh[n]&&Bo(t)?`${t}px`:t}function xh(n,t){if(dt(n)){const e=xi(n);return n=Ch(n,e),arguments.length<2?this[0]&&Ut(this[0],n,e):n?(t=Qo(n,t,e),this.each((s,i)=>{nt(i)&&(e?i.style.setProperty(n,t):i.style[n]=t)})):this}for(const e in n)this.css(e,n[e]);return this}M.css=xh;function Zo(n,t){try{return n(t)}catch{return t}}const Sh=/^\s+|\s+$/;function Xo(n,t){const e=n.dataset[t]||n.dataset[ki(t)];return Sh.test(e)?e:Zo(JSON.parse,e)}function $h(n,t,e){e=Zo(JSON.stringify,e),n.dataset[ki(t)]=e}function Th(n,t){if(!n){if(!this[0])return;const e={};for(const s in this[0].dataset)e[s]=Xo(this[0],s);return e}if(dt(n))return arguments.length<2?this[0]&&Xo(this[0],n):wt(t)?this:this.each((e,s)=>{$h(s,n,t)});for(const e in n)this.data(e,n[e]);return this}M.data=Th;function Jo(n,t){const e=n.documentElement;return Math.max(n.body[`scroll${t}`],e[`scroll${t}`],n.body[`offset${t}`],e[`offset${t}`],e[`client${t}`])}lt([!0,!1],(n,t)=>{lt(["Width","Height"],(e,s)=>{const i=`${t?"outer":"inner"}${s}`;M[i]=function(r){if(this[0])return Le(this[0])?t?this[0][`inner${s}`]:this[0].document.documentElement[`client${s}`]:ve(this[0])?Jo(this[0],s):this[0][`${t?"offset":"client"}${s}`]+(r&&t?zt(this[0],`margin${e?"Top":"Left"}`)+zt(this[0],`margin${e?"Bottom":"Right"}`):0)}})}),lt(["Width","Height"],(n,t)=>{const e=t.toLowerCase();M[e]=function(s){if(!this[0])return wt(s)?void 0:this;if(!arguments.length)return Le(this[0])?this[0].document.documentElement[`client${t}`]:ve(this[0])?Jo(this[0],t):this[0].getBoundingClientRect()[e]-jo(this[0],!n);const i=parseInt(s,10);return this.each((r,o)=>{if(!nt(o))return;const a=Ut(o,"boxSizing");o.style[e]=Qo(e,i+(a==="border-box"?jo(o,!n):0))})}});const ta="___cd";M.toggle=function(n){return this.each((t,e)=>{if(!nt(e))return;const s=Uo(e);(wt(n)?s:n)?(e.style.display=e[ta]||"",Uo(e)&&(e.style.display=lh(e.tagName))):s||(e[ta]=Ut(e,"display"),e.style.display="none")})},M.hide=function(){return this.toggle(!1)},M.show=function(){return this.toggle(!0)};const ea="___ce",$i=".",Ti={focus:"focusin",blur:"focusout"},sa={mouseenter:"mouseover",mouseleave:"mouseout"},Nh=/^(mouse|pointer|contextmenu|drag|drop|click|dblclick)/i;function Ni(n){return sa[n]||Ti[n]||n}function Mi(n){const t=n.split($i);return[t[0],t.slice(1).sort()]}M.trigger=function(n,t){if(dt(n)){const[s,i]=Mi(n),r=Ni(s);if(!r)return this;const o=Nh.test(r)?"MouseEvents":"HTMLEvents";n=jt.createEvent(o),n.initEvent(r,!0,!0),n.namespace=i.join($i),n.___ot=s}n.___td=t;const e=n.___ot in Ti;return this.each((s,i)=>{e&&we(i[n.___ot])&&(i[`___i${n.type}`]=!0,i[n.___ot](),i[`___i${n.type}`]=!1),i.dispatchEvent(n)})};function na(n){return n[ea]=n[ea]||{}}function Mh(n,t,e,s,i){const r=na(n);r[t]=r[t]||[],r[t].push([e,s,i]),n.addEventListener(t,i)}function ia(n,t){return!t||!_i.call(t,e=>n.indexOf(e)<0)}function Gs(n,t,e,s,i){const r=na(n);if(t)r[t]&&(r[t]=r[t].filter(([o,a,l])=>{if(i&&l.guid!==i.guid||!ia(o,e)||s&&s!==a)return!0;n.removeEventListener(t,l)}));else for(t in r)Gs(n,t,e,s,i)}M.off=function(n,t,e){if(wt(n))this.each((s,i)=>{!nt(i)&&!ve(i)&&!Le(i)||Gs(i)});else if(dt(n))we(t)&&(e=t,t=""),lt(Vs(n),(s,i)=>{const[r,o]=Mi(i),a=Ni(r);this.each((l,c)=>{!nt(c)&&!ve(c)&&!Le(c)||Gs(c,a,o,t,e)})});else for(const s in n)this.off(s,n[s]);return this},M.remove=function(n){return se(this,n).detach().off(),this},M.replaceWith=function(n){return this.before(n).remove()},M.replaceAll=function(n){return u(n).replaceWith(this),this};function Eh(n,t,e,s,i){if(!dt(n)){for(const r in n)this.on(r,t,e,n[r],i);return this}return dt(t)||(wt(t)||os(t)?t="":wt(e)?(e=t,t=""):(s=e,e=t,t="")),we(s)||(s=e,e=void 0),s?(lt(Vs(n),(r,o)=>{const[a,l]=Mi(o),c=Ni(a),h=a in sa,d=a in Ti;c&&this.each((p,f)=>{if(!nt(f)&&!ve(f)&&!Le(f))return;const g=function(y){if(y.target[`___i${y.type}`])return y.stopImmediatePropagation();if(y.namespace&&!ia(l,y.namespace.split($i))||!t&&(d&&(y.target!==f||y.___ot===c)||h&&y.relatedTarget&&f.contains(y.relatedTarget)))return;let _=f;if(t){let C=y.target;for(;!Vo(C,t);)if(C===f||(C=C.parentNode,!C))return;_=C}Object.defineProperty(y,"currentTarget",{configurable:!0,get(){return _}}),Object.defineProperty(y,"delegateTarget",{configurable:!0,get(){return f}}),Object.defineProperty(y,"data",{configurable:!0,get(){return e}});const b=s.call(_,y,y.___td);i&&Gs(f,c,l,t,g),b===!1&&(y.preventDefault(),y.stopPropagation())};g.guid=s.guid=s.guid||u.guid++,Mh(f,c,l,t,g)})}),this):this}M.on=Eh;function Ih(n,t,e,s){return this.on(n,t,e,s,!0)}M.one=Ih;const Ph=/\r?\n/g;function Ah(n,t){return`&${encodeURIComponent(n)}=${encodeURIComponent(t.replace(Ph,`\r -`))}`}const Dh=/file|reset|submit|button|image/i,ra=/radio|checkbox/i;M.serialize=function(){let n="";return this.each((t,e)=>{lt(e.elements||[e],(s,i)=>{if(i.disabled||!i.name||i.tagName==="FIELDSET"||Dh.test(i.type)||ra.test(i.type)&&!i.checked)return;const r=qo(i);if(!wt(r)){const o=Bs(r)?r:[r];lt(o,(a,l)=>{n+=Ah(i.name,l)})}})}),n.slice(1)},window.$=u;function oa(n,t){if(n==null)return[n,void 0];typeof t=="string"&&(t=t.split("."));const e=t.join(".");let s=n;const i=[s];for(;typeof s=="object"&&s!==null&&t.length;){let r=t.shift(),o;const a=r.indexOf("[");if(a>0&&a{const i=e[s]??"";n=n.replace(new RegExp(`\\{${s}\\}`,"g"),`${i}`)}),n}for(let e=0;e(n[n.B=1]="B",n[n.KB=1024]="KB",n[n.MB=1048576]="MB",n[n.GB=1073741824]="GB",n[n.TB=1099511627776]="TB",n))(Ei||{});function pt(n,t=2,e){return Number.isNaN(n)?"?KB":(e||(n<1024?e="B":n<1048576?e="KB":n<1073741824?e="MB":n<1099511627776?e="GB":e="TB"),(n/Ei[e]).toFixed(t)+e)}const Re=n=>{const t=/^[0-9]*(B|KB|MB|GB|TB)$/;n=n.toUpperCase();const e=n.match(t);if(!e)return 0;const s=e[1];return n=n.replace(s,""),Number.parseInt(n,10)*Ei[s]};let Ii=(document.documentElement.getAttribute("lang")||"zh_cn").toLowerCase().replace("-","_"),Kt;function Lh(){return Ii}function Rh(n){Ii=n.toLowerCase().replace("-","_")}function la(n,t){Kt||(Kt={}),typeof n=="string"&&(n={[n]:t??{}}),u.extend(!0,Kt,n)}function K(n,t,e,s,i,r){Array.isArray(n)?Kt&&n.unshift(Kt):n=Kt?[Kt,n]:[n],typeof e=="string"&&(r=i,i=s,s=e,e=void 0);const o=i||Ii;let a;for(const l of n){if(!l)continue;const c=l[o]||l.default;if(!c)continue;const h=r&&l===Kt?`${r}.${t}`:t;if(a=aa(c,h),a!==void 0)break}return a===void 0?s:e?U(a,...Array.isArray(e)?e:[e]):a}function Fh(n,t,e,s){return K(void 0,n,t,e,s)}K.addLang=la,K.getLang=Fh,K.getCode=Lh,K.setCode=Rh,K.map=Kt,la({zh_cn:{confirm:"确定",save:"保存",cancel:"取消",delete:"删除",reset:"重置",add:"添加"},zh_tw:{confirm:"確定",save:"儲存",cancel:"取消",delete:"刪除",reset:"重置",add:"添加"},en:{confirm:"Confirm",save:"Save",cancel:"Cancel",delete:"Delete",reset:"Reset",add:"Add"}});function ca(n,t,e){n instanceof Headers?n.set(t,e):Array.isArray(n)?n.push([t,e]):n[t]=e}function as(n,t,e){e!=null&&(Array.isArray(e)?e.forEach(s=>as(n,t,s)):n.append(t,e instanceof Blob?e:String(e)))}function zh(n,t){if(n){const e={text:"text/plain",html:"text/html",json:"application/json",...t};for(const[s,i]of Object.entries(e))if(i.split(",").map(r=>r.trim()).includes(n))return s}return"text"}function qs(n,t){const e=t||new FormData;return n&&(typeof n=="string"&&(n=new URLSearchParams(n)),n instanceof URLSearchParams?n.forEach((s,i)=>{as(e,i,s)}):Array.isArray(n)?n.forEach(([s,i])=>{as(e,s,i)}):n instanceof FormData?n.forEach((s,i)=>{as(e,i,s)}):u.isPlainObject(n)&&Object.entries(n).forEach(([s,i])=>{as(e,s,i)})),e}class Ys{get completed(){return this.data!==void 0||this.error!==void 0}get[Symbol.toStringTag](){return"Ajax"}constructor(t){this.setting=t,this._controller=new AbortController,this._callbacks={success:[],error:[],complete:[]}}on(t,e){return this._callbacks[t].push(e),this}success(t){return this.on("success",t)}done(t){return this.success(t)}fail(t){return this.on("error",t)}complete(t){return this.on("complete",t)}always(t){return this.complete(t)}then(t,e){return this.completed?e&&this.error?e(this.error):t(this.data):(this.success(s=>t(s)),e&&this.fail(e)),this}catch(t){return this.error?(t(this.error),this):this.on("error",e=>t(e))}finally(t){return this.completed?(t(),this):this.complete(()=>t())}abort(t){return this.completed?!1:(this._abortError=t,this._controller.abort(),!0)}getResponseHeader(t){var e;return(e=this.response)==null?void 0:e.headers.get(t)}_init(){if(this.completed)return;const{url:t,type:e,data:s,processData:i=!0,contentType:r,crossDomain:o,accepts:a,dataType:l,timeout:c,dataFilter:h,beforeSend:d,success:p,error:f,complete:g,...y}=this.setting;if((d==null?void 0:d(y))===!1)return;e&&(y.method=e);let _=s;_&&(i&&(_=qs(_)),y.body=_),o&&(y.mode="cors");const b=y.headers||{};ca(b,"X-Requested-With","XMLHttpRequest"),r&&ca(b,"Content-Type",r),y.headers=b,y.signal&&y.signal.addEventListener("abort",()=>{this.abort()}),p&&this.success(p),f&&this.fail(f),g&&this.complete(g),y.signal=this._controller.signal,this.url=t,this.request=y}_emit(t,...e){this._callbacks[t].forEach(s=>{s.call(this,...e)})}async send(){var h;if(this.completed)return[];this._init();const{timeout:t,dataType:e,accepts:s,dataFilter:i,throws:r,jsonParser:o}=this.setting;t&&(this._timeoutID=window.setTimeout(()=>{this.abort(new Error("timeout"))},t));let a,l,c;try{a=await fetch(this.url,this.request),this.response=a;const{statusText:d}=a;if(a.ok){const p=(h=a.headers.get("Content-Disposition"))==null?void 0:h.startsWith("attachment"),f=p?"blob":e||zh(a.headers.get("Content-Type"),s);p||f==="blob"||f==="file"?c=await a.blob():f==="json"?typeof o=="function"?(c=await a.text(),c=o(c)):c=await a.json():c=await a.text(),this.data=c;const g=(i==null?void 0:i(c,f))??c;this._emit("success",g,d,a)}else throw new Error(d)}catch(d){l=d;let p=!1;l.name==="AbortError"&&(this._abortError?l=this._abortError:p=!0),this.error=l,p||this._emit("error",l,a==null?void 0:a.statusText,l.message)}if(this._timeoutID&&clearTimeout(this._timeoutID),this._emit("complete",a,a==null?void 0:a.statusText),l&&r)throw l;return[c,l,a]}}u.ajax=(n,t)=>{t=t||{},typeof n=="string"?t.url=n:u.extend(t,n);const e=new Ys(t);return e.send(),e},u.getJSON=(n,t,e)=>(typeof t=="function"&&(e=t,t=void 0),u.ajax({url:n,data:t,success:e,dataType:"json"})),u.get=(n,t,e,s,i="GET")=>{let r,o;return typeof t=="function"?(r=t,o=void 0):o=t,typeof e=="function"?(r=e,s=void 0):s=e,u.ajax({method:i,url:n,data:o,success:r,dataType:s})},u.post=(n,t,e,s)=>u.get(n,t,e,s,"POST"),u.fn.load=function(n,t,e){typeof t=="function"&&(e=t,t=void 0);const[s,i]=n.split(" ");return u.get(s,t,(r,o,a)=>{i&&(r=u(r).find(i).html()),u(this).html(r),e==null||e.call(this,r,o,a)},"html"),this};async function Ce(n,t=[],e){const s={throws:!0,dataType:"json"};if(typeof n=="string")s.url=n;else if(typeof n=="object")u.extend(s,n);else if(typeof n=="function"){const o=n(...t);return o instanceof Promise?await o:o}e&&u.extend(s,typeof e=="function"?e(s):e);const i=new Ys(s),[r]=await i.send();return r}function Pi(n){return!!(n&&(typeof n=="string"||typeof n=="object"&&n.url||typeof n=="function"))}u.fetch=Ce;function mt(){return u.guid++}function Qs(n,t){if(n===t)return!1;if(n&&t&&typeof n=="object"&&typeof t=="object"){const e=Array.isArray(n),s=Array.isArray(t);if(e!==s)return!0;if(e&&s){if(n.length!==t.length)return!0;for(let o=0;oQs(s instanceof ke?s.value:s,e[i])))&&(this._value=this._compute(),this._lastDependencies=t.map(s=>s instanceof ke?s.cache:s)),this._value}}function Ai(...n){const t=[],e=new Map,s=(i,r)=>{if(Array.isArray(i)&&(r=i[1],i=i[0]),!i.length)return;const o=e.get(i);typeof o=="number"?t[o][1]=!!r:(e.set(i,t.length),t.push([i,!!r]))};return n.forEach(i=>{typeof i=="function"&&(i=i()),Array.isArray(i)?Ai(...i).forEach(s):i&&typeof i=="object"?Object.entries(i).forEach(s):typeof i=="string"&&i.split(" ").forEach(r=>s(r,!0))}),t.sort((i,r)=>(e.get(i[0])||0)-(e.get(r[0])||0))}const S=(...n)=>Ai(...n).reduce((t,[e,s])=>(s&&t.push(e),t),[]).join(" ");u.classes=S,u.fn.setClass=function(n,...t){return this.each((e,s)=>{const i=u(s);n===!0?i.attr("class",S(i.attr("class"),...t)):i.addClass(S(n,...t))})};const ls=new WeakMap;function Di(n,t,e){const s=ls.has(n),i=s?ls.get(n):{};typeof t=="string"?i[t]=e:t===null?Object.keys(i).forEach(r=>{delete i[r]}):Object.assign(i,t),Object.keys(i).forEach(r=>{i[r]===void 0&&delete i[r]}),Object.keys(i).length?(!s&&n instanceof Element&&Object.assign(i,u(n).dataset(),i),ls.set(n,i)):ls.delete(n)}function Li(n,t,e){let s=ls.get(n)||{};return!e&&n instanceof Element&&(s=Object.assign({},u(n).dataset(),s)),t===void 0?s:s[t]}u.fn.dataset=u.fn.data,u.fn.data=function(...n){const[t,e]=n;return!n.length||n.length===1&&typeof t=="string"?this.length?Li(this[0],t):void 0:this.each((s,i)=>Di(i,t,e))},u.fn.removeData=function(n=null){return this.each((t,e)=>Di(e,n))};function Zs(n,t="z-"){const e=u(n)[0];if(e)return Array.from(e.attributes).reduce((s,i)=>{let{name:r,value:o}=i;if(r.startsWith(t)){r=r.slice(t.length).replace(/-([a-z])/g,a=>a[1].toUpperCase());try{o.startsWith("RAWJS<")&&o.endsWith(">RAWJS")?o=new Function(`return ${o.substring(6,o.length-6)}`)():o=JSON.parse(o)}catch{}s[r]=o}return s},{})}function Ri(n,t,e="z-"){const s=u(n);Object.keys(t).forEach(i=>{let r=t[i];typeof r=="function"&&(r=`RAWJS<${r}>RAWJS`),typeof r!="string"&&(r=JSON.stringify(r)),i=i.replace(/[A-Z]/g,o=>`-${o.toLowerCase()}`),s.attr(`${e}${i}`,r)})}function Oh(...n){var e;const t=n.length;if(!t)return Zs(this);if(t===1){const[s]=n;return typeof s=="string"?(e=Zs(this))==null?void 0:e[s]:(u.isPlainObject(s)&&Ri(this,s),this)}return Ri(this,{[n[0]]:n[1]}),this}u.fn.z=Oh,u.fn._attr=u.fn.attr,u.fn.extend({attr(...n){const[t,e]=n;return!n.length||n.length===1&&typeof t=="string"?this._attr.apply(this,n):typeof t=="object"?(t&&Object.keys(t).forEach(s=>{const i=t[s];i===null?this.removeAttr(s):this._attr(s,i)}),this):e===null?this.removeAttr(t):this._attr(t,e)}}),u.Event=(n,t)=>{const[e,...s]=n.split("."),i=new Event(e,{bubbles:!0,cancelable:!0});return i.namespace=s.join("."),i.___ot=e,i.___td=t,i};const cs=(n,t)=>new Promise(e=>{const s=window.setTimeout(e,n);t&&t(s)}),ha={};u.share=ha;var Xs,q,da;w.isValidElement=void 0;var xe,ua,fa,Fi,hs={},pa=[],Wh=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,Js=Array.isArray;function ie(n,t){for(var e in t)n[e]=t[e];return n}function ma(n){var t=n.parentNode;t&&t.removeChild(n)}function v(n,t,e){var s,i,r,o={};for(r in t)r=="key"?s=t[r]:r=="ref"?i=t[r]:o[r]=t[r];if(arguments.length>2&&(o.children=arguments.length>3?Xs.call(arguments,2):e),typeof n=="function"&&n.defaultProps!=null)for(r in n.defaultProps)o[r]===void 0&&(o[r]=n.defaultProps[r]);return tn(n,o,s,i,null)}function tn(n,t,e,s,i){var r={type:n,props:t,key:e,ref:s,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,constructor:void 0,__v:i??++da,__i:-1,__u:0};return i==null&&q.vnode!=null&&q.vnode(r),r}function H(){return{current:null}}function re(n){return n.children}function B(n,t){this.props=n,this.context=t}function Fe(n,t){if(t==null)return n.__?Fe(n.__,n.__i+1):null;for(var e;tt&&xe.sort(Fi));en.__r=0}function _a(n,t,e,s,i,r,o,a,l,c,h){var d,p,f,g,y,_=s&&s.__k||pa,b=t.length;for(e.__d=l,Hh(e,t,_),l=e.__d,d=0;d0?tn(i.type,i.props,i.key,i.ref?i.ref:null,i.__v):i)!=null?(i.__=n,i.__b=n.__b+1,a=Bh(i,e,o=s+d,h),i.__i=a,r=null,a!==-1&&(h--,(r=e[a])&&(r.__u|=131072)),r==null||r.__v===null?(a==-1&&d--,typeof i.type!="function"&&(i.__u|=65536)):a!==o&&(a===o+1?d++:a>o?h>l-o?d+=a-o:d--:d=a(l!=null&&!(131072&l.__u)?1:0))for(;o>=0||a=0){if((l=t[o])&&!(131072&l.__u)&&i==l.key&&r===l.type)return o;o--}if(a{!e||typeof e!="object"||Object.keys(e).forEach(s=>{let i=e[s];const r=n[s];i!==r&&(r!==void 0&&(s==="className"||s.endsWith("Class")?i=[r,i]:s==="children"?i=[...sn(r),...sn(i)]:typeof r=="object"&&(s==="style"||s.endsWith("Style")||s==="attrs"||s.endsWith("Attrs")||s==="props")&&(i=u.extend(r,i))),n[s]=i)})}),n}function Hi(n){return Object.keys(n).forEach(t=>{n[t]===void 0&&delete n[t]}),n}const Oe=new Map;function ds(n){const{zui:t}=window;return(!Oe.size||n&&!Oe.has(n.toUpperCase()))&&Object.keys(t).forEach(e=>{const s=t[e];!s.NAME||!s.ZUI||Oe.set(e.toLowerCase(),s)}),n?Oe.get(n.toLowerCase()):void 0}function xa(n,t,e){const s=ds(n);return s?!s.MULTI_INSTANCE&&s.get(t)?(console.error(`[ZUI] cannot create component "${n}" on element which already has a component instance.`,{element:t,options:e}),null):new s(t,e):null}function Vh(n){if(n){const t=ds(n);t&&t.defineFn()}else ds(),Oe.forEach(t=>{t.defineFn()})}u.fn.zuiInit=function(){return this.find("[zui-create],[data-zui]").each(function(){const n=u(this);let t=Zs(n,"data-");const[e,s]=(t.zui||n.attr("zui-create")).split(":");n.zui(e)||(s?t=u.share[s]:delete t.zui,requestAnimationFrame(()=>xa(e,this,t)))}),this.find("[zui-init]").each(function(){const n=u(this);n.z("zuiInited")||u.runJS(n.z("zuiInited",!0).attr("zui-init"),["$element",n])}),this.find(".hide-before-init").removeClass("invisible hidden opacity-0"),this.find(".scroll-into-view").scrollIntoView(),this.find('[data-on="inited"]').each((n,t)=>{const e=u(t);e.zui()||e.trigger("inited")}),this},u.fn.zui=function(n,t){const e=this[0];if(!e)return;if(typeof n!="string"){const i=Li(e,void 0,!0),r={};let o;return Object.keys(i).forEach(a=>{if(a.startsWith("zui.")){const l=i[a];r[a]=l,(!o||o.gid{u("body").zuiInit()});function Sa(n,t=!0){const e=u(n),s=e[0],i="zui-disable-scroll";if(t){if(e.data(i))return;if((e.css("scrollbar-gutter")||"").includes("stable")){e.data(i,{overflow:e.css("overflow")}).css("overflow","hidden");return}const r=s===document.body||e.is("html")?window.innerWidth-document.body.clientWidth:s.offsetWidth-s.clientWidth;if(!r)return;const o=e.css("paddingRight")||"0";e.data(i,{paddingRight:o,overflow:e.css("overflow")}).css({paddingRight:`${r+Number.parseInt(o,10)}px`,overflow:"hidden"})}else{const r=e.data(i);if(!r)return;e.css(r).removeData(i)}}u.fn.disableScroll=function(n=!0){return this.each((t,e)=>{Sa(e,n)})},u.fn.enableScroll=function(n=!0){return this.disableScroll(!n)};function Kh(n){const t=u(this),e=t.dataset();if(!(e.on||"click").split(" ").includes(n.type))return;const s=e.selector?u(n.target).closest(e.selector):t;if(!s.length)return;const i=l=>l===""?!0:l,r=l=>{if(typeof l=="string")try{l=JSON.parse(l)}catch{}return l};if(i(e.once)){if(e.onceCalled)return;t.dataset("once-called",!0)}if(i(e.prevent)&&n.preventDefault(),i(e.stop)&&n.stopPropagation(),i(e.self)&&n.currentTarget!==n.target)return;const o=[["$element",t],["event",n],["options",e],["$target",s]];if(e.if&&!u.runJS(e.if,...o))return;const a=e.call;if(a){let l=window[a];const c=/^[$A-Z_][0-9A-Z_$.]*$/i.test(a);if(l||(l=u.runJS(a,...o)),!c||!u.isFunction(l))return;const h=[],d=e.params;e.params=h,typeof d=="string"&&d.length?d[0]==="["?h.push(...r(d)):h.push(...d.split(", ").map(p=>(p=p.trim(),p==="$element"?t:p==="event"?n:p==="options"?e:p.startsWith("$element.")||p.startsWith("event.")||p.startsWith("options.")?u.runJS(p,...o):r(p)))):h.push(d),l(...h)}e.do&&u.runJS(e.do,...o)}u(document).on("click.zui.global change.zui.global inited.zui.global","[data-on]",Kh);function We(n){if(typeof n=="function")return We(n());if(typeof n=="number")return[n];let t=n.match(/(\d+)(%|px)?/);return t?[parseInt(t[1]),t[2]]:(t=n.match(/(\d+)\/(\d+)/),t?[100*parseInt(t[1])/parseInt(t[2]),"%"]:[NaN])}function it(n){if(n==null)return null;const[t,e="px"]=We(n);return Number.isNaN(t)?typeof n=="string"?n:null:`${t}${e}`}async function rn(n,t){var s,i,r;if(n instanceof Blob){const o=document.createElement("a");return o.href=window.URL.createObjectURL(n),t&&(o.download=decodeURIComponent(t)),o.click(),o.remove(),n}if(n instanceof Response){const o=await n.blob();return t=t||((r=(i=(s=n.headers.get("Content-Disposition"))==null?void 0:s.split(";")[1])==null?void 0:i.split("=")[1])==null?void 0:r.replace(/"/g,"")),rn(o,t)}const e=await fetch(n);return rn(e)}class $a{constructor(t){this._$target=u(t)}on(...t){return this._$target.on(...t),this}one(...t){return this._$target.one(...t),this}off(...t){return this._$target.off(...t),this}trigger(...t){return this._$target.trigger(...t),this}}const Wt=new $a(document);u.bus=Wt,u.on=Wt.on.bind(Wt),u.one=Wt.one.bind(Wt),u.off=Wt.off.bind(Wt),u.trigger=Wt.trigger.bind(Wt);var Gh=["Shift","Meta","Alt","Control"],Ta=typeof navigator=="object"?navigator.platform:"",Na=/Mac|iPod|iPhone|iPad/.test(Ta),qh=Na?"Meta":"Control",Yh=Ta==="Win32"?["Control","Alt"]:Na?["Alt"]:[];function Bi(n,t){return typeof n.getModifierState=="function"&&(n.getModifierState(t)||Yh.includes(t)&&n.getModifierState("AltGraph"))}function Qh(n){return n.trim().split(" ").map(function(t){var e=t.split(/\b\+/),s=e.pop();return[e=e.map(function(i){return i==="$mod"?qh:i}),s]})}function Ma(n,t){var e;t===void 0&&(t={});var s=(e=t.timeout)!=null?e:1e3,i=Object.keys(n).map(function(a){return[Qh(a),n[a]]}),r=new Map,o=null;return function(a){a instanceof KeyboardEvent&&(i.forEach(function(l){var c=l[0],h=l[1],d=r.get(c)||c;(function(p,f){return!(f[1].toUpperCase()!==p.key.toUpperCase()&&f[1]!==p.code||f[0].find(function(g){return!Bi(p,g)})||Gh.find(function(g){return!f[0].includes(g)&&f[1]!==g&&Bi(p,g)}))})(a,d[0])?d.length>1?r.set(c,d.slice(1)):(r.delete(c),h(a)):Bi(a,a.key)||r.delete(c)}),o&&clearTimeout(o),o=setTimeout(r.clear.bind(r),s))}}function Zh(n,t,e){var s;e===void 0&&(e={});var i=(s=e.event)!=null?s:"keydown",r=Ma(t,e);return n.addEventListener(i,r),function(){n.removeEventListener(i,r)}}function ji(n,t={}){if(!n)return;const e=Object.keys(t).reduce((s,i)=>(t[i].optional||(s[i]={...t[i]}),s),{});return Object.keys(n).forEach(s=>{const i=n[s];i?i===!0?t[s]&&(e[s]={...t[s]}):e[s]=i:delete e[s]}),Object.keys(e).reduce((s,i)=>{const{keys:r,handler:o}=e[i];return typeof r=="string"?s[r]=o:r.forEach(a=>{s[a]=o}),s},{})}function Ui(n,t,e){const{timeout:s,event:i="keydown",scope:r,when:o}=e||{},a=Ma(t,{timeout:s});return u(n).on(`${i}.zui.hotkeys${r?`.${r}`:""}`,function(l){o&&o(l)===!1||a(l)})}function Vi(n,t){return u(n).off(`.zui.hotkeys${t?`.${t}`:""}`)}const Xh=Zh;u.fn.hotkeys=function(n,t){return Ui(this,n,t)},u.fn.unbindHotkeys=function(n){return Vi(this,n)},u.hotkeys=function(n,t){Ui(window,n,t)},u.unbindHotkeys=function(n){Vi(window,n)};function on(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement}async function Ea(n){(typeof n=="string"||n instanceof Element||n instanceof u)&&(n={target:n});const{target:t,onError:e,onSuccess:s,afterExit:i,afterEnter:r}=n,o=u(t),a=o[0];if(!a)return;const l=a.requestFullscreen||a.webkitRequestFullscreen||a.mozRequestFullScreen;if(!l){e==null||e.call(a,new Error("[ZUI] The browser does not support full screen feature."));return}try{await l.call(a),s==null||s.call(a),u(a).off(".zui.fullscreen"),i&&o.on("exitFullscreen.zui.fullscreen",i),r&&o.on("enterFullscreen.zui.fullscreen",r)}catch(c){e==null||e.call(a,c)}document.zuiBindFullscreenChange||(document.zuiBindFullscreenChange=!0,u(document).on("fullscreenchange.zui webkitfullscreenchange.zui mozfullscreenchange.zui",c=>{const h=on();let d=h;h?u(h).addClass("is-in-fullscreen"):(d=u(document).find(".is-in-fullscreen")[0]||document,u(d).removeClass("is-in-fullscreen")),u("body").toggleClass("has-in-fullscreen",!!h);const p={event:c,target:d,fullscreenElement:h};u(d).trigger(h?"enterFullscreen":"exitFullscreen",p).trigger("toggleFullscreen",p)}))}async function Ki(n){const t=on();return n===!1&&!!t===n?n:t?(document.exitFullscreen(),!1):(await Ea(n),!0)}u.fn.fullscreen=function(n){return Ki({target:this,...n})},u.getFullscreenElement=on,u.toggleFullscreen=Ki;function Se(n){return n.parentNode===document?!1:n.parentNode?Se(n.parentNode):!0}u.isDetached=Se,u.fn.isDetached=function(){const n=this[0];return!n||Se(n)};class X{constructor(t,e){this._inited=!1,this._autoDestory=0;const{KEY:s,DATA_KEY:i,DEFAULT:r,MULTI_INSTANCE:o,NAME:a}=this.constructor;if(!a)throw new Error('[ZUI] The component must have a "NAME" static property.');const l=u(t);if(l.data(s)&&!o)throw new Error("[ZUI] The component has been initialized on element.");const c=l[0],h=mt();this._gid=h,this._element=c;const d=l.parent();if(d.length&&(this._mobs=new MutationObserver(p=>{p.forEach(f=>{f.removedNodes.forEach(g=>{g===c&&(this._autoDestory&&clearTimeout(this._autoDestory),this._autoDestory=window.setTimeout(()=>{this._autoDestory=0,Se(c)&&this.destroy()},100))})})}),this._mobs.observe(d[0],{childList:!0,subtree:!1})),this._options={...r,...l.dataset()},this.setOptions(e),this._key=this.options.key??`__${h}`,l.data(s,this).attr(i,`${h}`),o){const p=`${s}:ALL`;let f=l.data(p);f||(f=new Map,l.data(p,f)),f.set(this._key,this)}this.init(),requestAnimationFrame(async()=>{this._inited=!0,await this.afterInit(),this.emit("inited",this.options)})}static get ZUI(){return this.NAME.replace(/(^[A-Z]+)/,t=>t.toLowerCase())}static get KEY(){return`zui.${this.NAME}`}static get NAMESPACE(){return`.zui.${this.ZUI}`}static get DATA_KEY(){return`data-zui-${this.NAME}`}static get SELECTOR(){return`[${this.DATA_KEY}]`}get inited(){return this._inited}get element(){return this._element}get key(){return this._key}get options(){return this._options}get gid(){return this._gid}get $element(){return u(this.element)}get $emitter(){return this.$element}get i18nData(){return[this.options.i18n,this.constructor.i18n]}init(){}afterInit(){}render(t){this.setOptions(t)}destroy(){var r;const{KEY:t,DATA_KEY:e,MULTI_INSTANCE:s}=this.constructor,{$element:i}=this;if(this.emit("destroyed"),(r=this._mobs)==null||r.disconnect(),i.off(this.namespace).removeData(t).attr(e,null),s){const o=this.$element.data(`${t}:ALL`);if(o)if(o.delete(this._key),o.size===0)this.$element.removeData(`${t}:ALL`);else{const a=o.values().next().value;i.data(t,a).attr(e,a.gid)}}}setOptions(t){return t&&u.extend(this._options,t),this._options}emit(t,...e){const s=u.Event(t);return s.__src=this,this.$emitter.trigger(s,[this,...e]),s}on(t,e,s){const i=this;this.$element[s!=null&&s.once?"one":"on"](this._wrapEvent(t),function(r,o){(!r.__src||r.__src===i)&&e.call(this,r,o)})}one(t,e){this.on(t,e,{once:!0})}off(t){this.$element.off(this._wrapEvent(t))}i18n(t,e,s){const{i18nData:i}=this;return K(i,t,e,s,this.options.lang,this.constructor.NAME)??K(i,t,e,s,this.options.lang)??`{i18n:${t}}`}get namespace(){return`${this.constructor.NAMESPACE}.${this._key}`}_wrapEvent(t){return t.split(" ").map(e=>e.includes(".")?e:`${e}${this.namespace}`).join(" ")}static get(t,e){const s=u(t);if(this.MULTI_INSTANCE&&e!==void 0){const i=s.data(`${this.KEY}:ALL`);return i?i.get(e):void 0}return s.data(this.KEY)}static ensure(t,e){const s=this.get(t,e==null?void 0:e.key);return s?(e&&s.setOptions(e),s):new this(t,e)}static getAll(t){const{MULTI_INSTANCE:e,SELECTOR:s}=this,i=[];return u(t||document).find(s).each((r,o)=>{if(e){const l=u(o).data(`${this.KEY}:ALL`);if(l){i.push(...l.values());return}}const a=u(o).data(this.KEY);a&&i.push(a)}),i.sort((r,o)=>r.gid-o.gid)}static query(t,e,s){if(t===void 0){let i=this.getAll();return s&&(i=i.filter(s)),i.pop()}return this.get(u(t).closest(this.SELECTOR),e)}static defineFn(t){let e=t||this.ZUI;u.fn[e]&&(e=`zui${this.NAME}`);const s=this;u.fn.extend({[e](i,...r){const o=typeof i=="object"?i:void 0,a=typeof i=="string"?i:void 0;let l;return this.each((c,h)=>{let d=s.get(h);if(d?o&&d.render(o):d=new s(h,o),a){let p=d[a],f=d;p===void 0&&(f=d.$,p=f[a]),typeof p=="function"?l=p.call(f,...r):l=p}}),l!==void 0?l:this}})}}X.DEFAULT={},X.MULTI_INSTANCE=!1;class Ia extends X{init(){const{offset:t=1,side:e,zIndex:s,pinnedClass:i="is-pinned"}=this.options,{$element:r}=this;r.css({position:"sticky",zIndex:s}),e&&r.css(e,-t),this._ob=new IntersectionObserver(([o])=>o.target.classList.toggle(i,o.intersectionRatio=l&&r>=c&&i+o<=h&&r+a<=d;const p=i<=h&&i+o>=l;return r<=d&&r+a>=c&&p}u.fn.isVisible=function(n){return an(this,n)};function Gi(n,t,e=!1){const s=u(n);if(t!==void 0){if(t.length){const i=`zui-runjs-${mt()}`;s.append(`