@co0ontty/wand 4.57.0 → 4.58.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build-info.json +3 -3
- package/dist/ensure-node-pty-helper.d.ts +0 -1
- package/dist/ensure-node-pty-helper.js +0 -5
- package/dist/git-quick-commit.js +18 -19
- package/dist/github-connector.d.ts +11 -5
- package/dist/github-connector.js +105 -33
- package/dist/missions.d.ts +1 -1
- package/dist/missions.js +17 -4
- package/dist/server-file-routes.js +43 -2
- package/dist/server-github-routes.js +50 -53
- package/dist/server-mission-routes.js +11 -10
- package/dist/server-task-routes.d.ts +14 -2
- package/dist/server-task-routes.js +248 -84
- package/dist/server-workspace-routes.js +90 -16
- package/dist/server.js +2 -20
- package/dist/storage.d.ts +23 -6
- package/dist/storage.js +130 -53
- package/dist/structured-exec-host.d.ts +13 -2
- package/dist/structured-exec-host.js +71 -36
- package/dist/structured-exec-pump.d.ts +1 -1
- package/dist/structured-exec-pump.js +14 -8
- package/dist/task-types.d.ts +15 -0
- package/dist/terminal-daemon-client.d.ts +2 -0
- package/dist/terminal-daemon-client.js +7 -1
- package/dist/terminal-daemon-server.js +17 -18
- package/dist/tui/ipc-server.js +3 -1
- package/dist/types.d.ts +1 -0
- package/dist/wand-task-sync.d.ts +9 -0
- package/dist/wand-task-sync.js +50 -0
- package/dist/web-ui/content/scripts.js +85 -85
- package/dist/web-ui/content/styles.css +1 -1
- package/dist/web-ui/embedded-assets.js +2 -2
- package/dist/ws-broadcast.js +5 -1
- package/package.json +2 -3
- package/dist/taskboard-bridge.d.ts +0 -11
- package/dist/taskboard-bridge.js +0 -371
- package/vendor/codex-taskboard/LICENSE +0 -201
- package/vendor/codex-taskboard/dist/web/assets/AiChat-BNn4VJ5a.js +0 -12
- package/vendor/codex-taskboard/dist/web/assets/GanttView-D8wnfGrG.css +0 -1
- package/vendor/codex-taskboard/dist/web/assets/GanttView-rGWhuEX9.js +0 -39
- package/vendor/codex-taskboard/dist/web/assets/abnfDiagram-N423BO3Z-DbFG6lbA.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/arc-BjSQqbzd.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/architecture-TIHT7OUA-C9-t8p4o.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/architectureDiagram-T3A2C74G-Db4kJZwO.js +0 -36
- package/vendor/codex-taskboard/dist/web/assets/array-BifhSqXX.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/blockDiagram-VBNYF7ZC-C-BywuWV.js +0 -132
- package/vendor/codex-taskboard/dist/web/assets/c4Diagram-5PPSVZJV-Dq-80rjP.js +0 -10
- package/vendor/codex-taskboard/dist/web/assets/channel-C7mnz8Xc.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-2GRJ4B5K-B2G57us9.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-3NCLNEKW-DVGIRib_.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-4I5QYGJK-kNoGFqr0.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-5RXB4S5H-4iv6-xM6.js +0 -231
- package/vendor/codex-taskboard/dist/web/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -15
- package/vendor/codex-taskboard/dist/web/assets/chunk-6Q2QTUOP-1J34vxHr.js +0 -88
- package/vendor/codex-taskboard/dist/web/assets/chunk-7BUUIJ7U-Bb538aSH.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-7Z6QIM7H-CDQpQlxX.js +0 -10
- package/vendor/codex-taskboard/dist/web/assets/chunk-GF5L2VYU-Dg92oHHl.js +0 -206
- package/vendor/codex-taskboard/dist/web/assets/chunk-I66GZJ75-Bk8_gFs2.js +0 -125
- package/vendor/codex-taskboard/dist/web/assets/chunk-J7OUQ5F2-CJRcenlr.js +0 -2
- package/vendor/codex-taskboard/dist/web/assets/chunk-JQJVKLGR-BLBV_Sus.js +0 -156
- package/vendor/codex-taskboard/dist/web/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-KBJHAD2P-Da9Yjz0p.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-KEIR6QF5-Dj-OpFgW.js +0 -161
- package/vendor/codex-taskboard/dist/web/assets/chunk-NSK5VX7P-Cb56tnGK.js +0 -2
- package/vendor/codex-taskboard/dist/web/assets/chunk-QR6OTTB3-BwoszTxn.js +0 -62
- package/vendor/codex-taskboard/dist/web/assets/chunk-RYQCIY6F-D_L2RdcQ.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-UBXNYLIW-YX5mN8cl.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-W5SLKNZC-DlOLhhDO.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-WRU74C26-B7SBmP0K.js +0 -70
- package/vendor/codex-taskboard/dist/web/assets/chunk-XXDRQBXY-BuE3VzE_.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/chunk-ZIRB5QZD-C6fEPe3t.js +0 -32
- package/vendor/codex-taskboard/dist/web/assets/classDiagram-JCYQIIEL-KIdCVvbA.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/classDiagram-v2-OCEON4UE-KIdCVvbA.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/cose-bilkent-JH36ORCC-BzQvy5TC.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/cynefin-VYW2F7L2-D1_5O1XR.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/cynefinDiagram-MW4NZA55-DOW_U5QN.js +0 -62
- package/vendor/codex-taskboard/dist/web/assets/cytoscape.esm-DnGd5Fuo.js +0 -321
- package/vendor/codex-taskboard/dist/web/assets/dagre-VZM6K2ZE-0Dntc3NT.js +0 -4
- package/vendor/codex-taskboard/dist/web/assets/dagre-dpRSp0QF.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/defaultLocale-C8Fc0cco.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/diagram-7IWD3JNH-D7GleYAM.js +0 -30
- package/vendor/codex-taskboard/dist/web/assets/diagram-B4RE2ZJO-DCXTe6q5.js +0 -3
- package/vendor/codex-taskboard/dist/web/assets/diagram-LBJQPF4R-ZFJyXEXl.js +0 -24
- package/vendor/codex-taskboard/dist/web/assets/diagram-Q27KOJAE-DUGCuGd9.js +0 -24
- package/vendor/codex-taskboard/dist/web/assets/diagram-UB23O5K3-DRmp4Nng.js +0 -41
- package/vendor/codex-taskboard/dist/web/assets/dist-D9sYb5Oa.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/ebnfDiagram-BXEA7PRR-CkKoaf7T.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/erDiagram-JOGREHBK-nBX5z4R4.js +0 -85
- package/vendor/codex-taskboard/dist/web/assets/eventmodeling-45OFAUF4-pexmK65N.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/flowDiagram-UKHOOZJN-aroohRbL.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/ganttDiagram-PKOTCBZU-BOJWUTXa.js +0 -292
- package/vendor/codex-taskboard/dist/web/assets/gitGraph-TEB2WS4Q-DxnuhSZU.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/gitGraphDiagram-DS77QQ5N-Cte975TC.js +0 -106
- package/vendor/codex-taskboard/dist/web/assets/graphlib-DS17s2tU.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/index-Docmx4uQ.css +0 -1
- package/vendor/codex-taskboard/dist/web/assets/index-Du07lEGz.js +0 -121
- package/vendor/codex-taskboard/dist/web/assets/info-DKCQHKI2-DOTjgYxk.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/infoDiagram-6WML65LV-SpyV9UJd.js +0 -2
- package/vendor/codex-taskboard/dist/web/assets/init-D6jRqBbL.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/ishikawaDiagram-WSZJBQD7-T0PZwoUZ.js +0 -70
- package/vendor/codex-taskboard/dist/web/assets/journeyDiagram-NVQOT4AX-B88b8UgX.js +0 -139
- package/vendor/codex-taskboard/dist/web/assets/kanban-definition-27J2QSJJ-CIlfNnl_.js +0 -89
- package/vendor/codex-taskboard/dist/web/assets/katex-B7rAX3Vi.js +0 -257
- package/vendor/codex-taskboard/dist/web/assets/line-fWrwPZhB.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/linear-B7l8qgEw.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/map-BaFkSB1l.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/mermaid-parser.core-C5gls2nC.js +0 -7
- package/vendor/codex-taskboard/dist/web/assets/mermaid.core-POz2Xcvr.js +0 -11
- package/vendor/codex-taskboard/dist/web/assets/mindmap-definition-FAOFIHXS-BM0-egZ5.js +0 -96
- package/vendor/codex-taskboard/dist/web/assets/ordinal-hYBb2elL.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/packet-7NZHBO7P-DQZzyVos.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/path-BWPyau1x.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/pegDiagram-VL7TDLO6-B8aEwl-7.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/pie-RZYD4A2V-DRUflilR.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/pieDiagram-7S7Q4E2Y-0cDDxlua.js +0 -39
- package/vendor/codex-taskboard/dist/web/assets/purify.es-Bwt4ulIK.js +0 -3
- package/vendor/codex-taskboard/dist/web/assets/quadrantDiagram-CIZ2JOQS-CBgb0YZ0.js +0 -7
- package/vendor/codex-taskboard/dist/web/assets/radar-I7S5WNFK-tRocoKxq.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/railroad-3IZDKUUU-DaS4ZlX_.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/railroad-abnf-AHOZXSZD-BN1T5dBT.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/railroad-ebnf-EBAXGLYW-Cuf8qyKs.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/railroad-peg-LSFZ7HO6-B511_EYq.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/railroadDiagram-AXF67PYL-QtPo-JZb.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/requirementDiagram-LRYGKXZP-CuBIF85r.js +0 -84
- package/vendor/codex-taskboard/dist/web/assets/rolldown-runtime-QTnfLwEv.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/rough.esm-CSKSodPl.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/sankeyDiagram-W5VNT64P-CRA-b_za.js +0 -40
- package/vendor/codex-taskboard/dist/web/assets/sequenceDiagram-SI44F4Z6-CoddVWwY.js +0 -162
- package/vendor/codex-taskboard/dist/web/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/src-_wZywoZs.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/stateDiagram-OKZ733FA-D8DMM2ln.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/stateDiagram-v2-UEYNNEHI-CVp0eYAS.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/swimlanes-SLNWSIFB-C1fC7EFu.js +0 -2
- package/vendor/codex-taskboard/dist/web/assets/swimlanesDiagram-ULZ7WXOC-CPd58Xso.js +0 -8
- package/vendor/codex-taskboard/dist/web/assets/timeline-definition-Z64GVDOM-BUBv8aKP.js +0 -120
- package/vendor/codex-taskboard/dist/web/assets/treeView-QDETBFTQ-C-Bve2kY.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/treemap-6X3UGDF4-BcphHDdV.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/vennDiagram-T6HMQDX7-0wQnwAyA.js +0 -34
- package/vendor/codex-taskboard/dist/web/assets/wardley-OPB4EBWU-CJZ4BevB.js +0 -1
- package/vendor/codex-taskboard/dist/web/assets/wardleyDiagram-T6FBY63Y-U9nwPrkN.js +0 -78
- package/vendor/codex-taskboard/dist/web/assets/xychartDiagram-ELKLHX3M-CyCqnzgE.js +0 -7
- package/vendor/codex-taskboard/dist/web/codex-agent-logo.png +0 -0
- package/vendor/codex-taskboard/dist/web/codex-app-icon.png +0 -0
- package/vendor/codex-taskboard/dist/web/favicon.svg +0 -7
- package/vendor/codex-taskboard/dist/web/index.html +0 -20
- package/vendor/codex-taskboard/server/ai-chat-catalog.mjs +0 -1031
- package/vendor/codex-taskboard/server/ai-chat-process.mjs +0 -462
- package/vendor/codex-taskboard/server/ai-chat.mjs +0 -1237
- package/vendor/codex-taskboard/server/ai-turn-owner.mjs +0 -39
- package/vendor/codex-taskboard/server/app.mjs +0 -3211
- package/vendor/codex-taskboard/server/cloud-config.mjs +0 -188
- package/vendor/codex-taskboard/server/cloud-proxy.mjs +0 -310
- package/vendor/codex-taskboard/server/codex-app-server.mjs +0 -376
- package/vendor/codex-taskboard/server/codex-slash-commands-0.139.0.json +0 -62
- package/vendor/codex-taskboard/server/database.mjs +0 -2845
- package/vendor/codex-taskboard/server/index.mjs +0 -41
- package/vendor/codex-taskboard/server/jira-config.mjs +0 -181
- package/vendor/codex-taskboard/server/jira-integration.mjs +0 -487
- package/vendor/codex-taskboard/server/project-summary.mjs +0 -159
- package/vendor/codex-taskboard/shared/api-fields.mjs +0 -163
- package/vendor/codex-taskboard/shared/codex-environment.mjs +0 -5
- package/vendor/codex-taskboard/shared/codex-executable.mjs +0 -77
- package/vendor/codex-taskboard/shared/codex-permissions.mjs +0 -9
- package/vendor/codex-taskboard/shared/composer-reference.d.mts +0 -19
- package/vendor/codex-taskboard/shared/composer-reference.mjs +0 -90
- package/vendor/codex-taskboard/shared/domain.mjs +0 -34
- package/vendor/codex-taskboard/shared/executable-command.mjs +0 -13
- package/vendor/codex-taskboard/shared/process-tree.mjs +0 -27
- package/vendor/codex-taskboard/shared/task-input.mjs +0 -308
- package/vendor/codex-taskboard/shared/task-records.mjs +0 -199
- package/vendor/codex-taskboard/shared/task-relations.mjs +0 -55
- package/vendor/codex-taskboard/shared/taskboard-automation.mjs +0 -277
- package/vendor/codex-taskboard/skills/manage-taskboard/SKILL.md +0 -45
- package/vendor/codex-taskboard/skills/manage-taskboard/agents/openai.yaml +0 -4
- package/vendor/codex-taskboard/skills/manage-taskboard/references/cli.md +0 -211
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import{A as e,B as t,C as n,D as r,E as i,F as a,H as o,I as s,L as c,M as l,N as u,O as d,P as ee,R as te,S as f,T as ne,V as p,_ as m,a as h,b as re,c as g,d as ie,g as _,h as ae,j as oe,k as v,l as se,m as ce,n as le,o as y,p as b,s as ue,t as de,u as fe,v as pe,w as me,x as he,y as x,z as ge}from"./index-Du07lEGz.js";var S=o(),_e=p();function ve(e,t){if(!e)return null;try{let n=JSON.parse(e),r=new Set(t);return typeof n.message!=`string`||!Array.isArray(n.skillIds)||!n.skillIds.every(e=>typeof e==`string`)||n.message.split(``).length-1!==n.skillIds.length||!n.skillIds.every(e=>r.has(e))?null:{message:n.message,skillIds:n.skillIds}}catch{return null}}function ye(e,t){return e?{projectId:e,...t?{issueId:t}:{}}:null}function be(e,t,n){let r=e.find(e=>e.slug===t)??e[0];return r?{model:r.slug,reasoningEffort:xe(r,n)}:null}var C=[`minimal`,`low`,`medium`,`high`,`xhigh`,`max`,`ultra`];function xe(e,t){let n=t??``,r=C.indexOf(n);return r<0?e.defaultReasoningEffort:e.supportedReasoningEfforts.includes(n)?n:e.supportedReasoningEfforts.map(e=>({effort:e,index:C.indexOf(e)})).filter(({index:e})=>e>=0).sort((e,t)=>Math.abs(e.index-r)-Math.abs(t.index-r)||e.index-t.index)[0]?.effort??e.defaultReasoningEffort}function Se(e,t,n,r=[]){return{message:e,...t.length>0?{skillIds:t}:{},...r.length>0?{attachments:r}:{},...n?{dangerFullAccessConfirmed:!0}:{}}}function Ce(e=``){return{version:1,nodes:e?[{type:`text`,text:e}]:[]}}function w(e){let t=[];for(let n of e.nodes)if(n.type===`text`){if(!n.text)continue;let e=t.at(-1);e?.type===`text`?e.text+=n.text:t.push({type:`text`,text:n.text})}else t.push({type:n.type,candidateRef:n.candidateRef,label:n.label});return{version:1,nodes:t}}function we(e){return w(e)}function Te(e,t,r,i=[]){return{contractVersion:n,revision:t,document:we(e),...i.length>0?{attachments:i}:{},...r?{dangerFullAccessConfirmed:!0}:{}}}function Ee(e,t,n=!1,r=!1){return n?`disabled`:e===`running`?`stop`:t.trim()||r?`send`:`disabled`}function De(e,t){return e===`danger-full-access`&&!t}var T=new Set([`agent_message`,`assistant`,`plan`,`todo`,`todo_list`,`command`,`command_execution`,`file`,`file_change`,`mcp`,`mcp_tool_call`,`skill`,`web`,`web_search`,`error`,`turn.failed`,`user_message`,`user`]);function Oe(e){return e.role===`user`||e.role===`assistant`||e.type===`user`||e.type===`user_message`||e.type===`assistant`||e.type===`agent_message`}function E(e){let t=e.filter(e=>T.has(e.type)),n=new Map;return t.forEach((e,t)=>{let r=e.data?.itemId;!Oe(e)&&typeof r==`string`&&n.set(r,t)}),t.filter((e,t)=>{let r=e.data?.itemId;return Oe(e)||typeof r!=`string`||n.get(r)===t})}function ke(e){if(e.role===`error`||e.type===`turn.failed`)return`failed`;let t=e.data?.status;return t===`running`||t===`started`||t===`in_progress`?`running`:t===`failed`||t===`error`?`failed`:`completed`}function Ae(e,t,n){return!e||e.thread.id!==t?e:{...e,thread:n}}function je(e){let t=new Map,n=!0;return{request(r){let i=t.get(r);if(i)return i.queued=!0,i.promise;let a={queued:!1,promise:Promise.resolve()};return a.promise=(async()=>{do a.queued=!1,await e(r);while(n&&a.queued)})().finally(()=>{t.get(r)===a&&t.delete(r)}),t.set(r,a),a.promise},clear(){n=!1,t.clear()}}}var D=i(),Me=`taskboard.aiChat.lastThreadId`,Ne=`taskboard.aiChat.panelView`,Pe=`taskboard.aiChat.panelGeometry`,Fe=8,Ie=420,Le=960,Re=360,O={width:420,height:700},k=``,A=`#ai-chat-skill-`,ze=`application/x-codex-taskboard-composer-fragment`,j=new Set([`ADDRESS`,`ARTICLE`,`BLOCKQUOTE`,`DIV`,`H1`,`H2`,`H3`,`H4`,`H5`,`H6`,`LI`,`P`,`PRE`,`SECTION`]),M=new Set([`SCRIPT`,`STYLE`,`SVG`]),Be={"read-only":[`请求批准`,`Ask for approval`],"workspace-write":[`帮我批准`,`Approve selected actions`],"danger-full-access":[`完全访问权限`,`Full access`]};function Ve(e){let t=Math.min(Le,window.innerWidth-Fe*2),n=Math.min(Ie,t),r=window.innerHeight-Fe*2,i=Math.min(Re,r);return{width:Math.min(t,Math.max(n,e.width)),height:Math.min(r,Math.max(i,e.height))}}function He(){let e=de.getItem(Pe);if(!e)return Ve(O);try{let t=JSON.parse(e);return!Number.isFinite(t.width)||!Number.isFinite(t.height)?Ve(O):Ve(t)}catch{return Ve(O)}}var Ue={"read-only":[`编辑外部文件和使用互联网时始终询问`,`Always ask before editing external files or using the internet`],"workspace-write":[`仅对检测到的风险操作请求批准`,`Ask only for operations that are detected as risky`],"danger-full-access":[`不受限制地访问互联网和您电脑上的任何文件`,`Access the internet and any file on your computer without restrictions`]};function We({sandbox:e}){return e===`read-only`?(0,D.jsx)(m,{color:`currentColor`}):e===`workspace-write`?(0,D.jsx)(f,{color:`currentColor`}):(0,D.jsx)(ce,{})}var Ge={low:[`低`,`Low`],medium:[`中`,`Medium`],high:[`高`,`High`],xhigh:[`极高`,`Extra high`],max:[`最高`,`Maximum`],ultra:[`极高`,`Ultra`]};function Ke(e){return e.replace(/^GPT-/i,``).replaceAll(`-`,` `)}var qe=new Map([[`ai`,`AI`],[`api`,`API`],[`cli`,`CLI`],[`mcp`,`MCP`],[`sdk`,`SDK`],[`ui`,`UI`]]);function Je(e){return(e.label===e.id&&e.id.includes(`:`)?e.id.slice(e.id.lastIndexOf(`:`)+1):e.label).split(/[-_\s]+/).filter(Boolean).map(e=>qe.get(e.toLocaleLowerCase())??(/^[A-Z][A-Za-z0-9]*$/.test(e)?e:`${e.charAt(0).toLocaleUpperCase()}${e.slice(1)}`)).join(` `)}function N(e,t,n,r,i){let a=y(e,t,n);return{kind:e,stableId:t,label:n,referenceKey:r??a.referenceKey,markdown:i??a.markdown}}function Ye(e){let t=e.data?.skillIds;return Array.isArray(t)?t.filter(e=>typeof e==`string`):[]}function Xe(e){return Array.isArray(e.data?.attachments)&&e.data.attachments.length>0}function Ze(e){let t=[],n=e=>{let n=e.replaceAll(``,``);if(!n)return;let r=t.at(-1)?.node;r?.type===`text`?r.text+=n:t.push({node:{type:`text`,text:n}})},r=e=>{if(e.nodeType===Node.TEXT_NODE){n(e.textContent??``);return}if(!(e instanceof HTMLElement))return;let i=e.dataset.composerStableId??e.dataset.skillId,a=i??e.dataset.composerCandidateRef;if(a){let n=e.dataset.composerReferenceKey,r=e.dataset.composerKind===`agent`?`agent`:`skill`,o=e.dataset.composerLabel??``;t.push({node:n?{type:`persistedReference`,referenceKind:r,referenceKey:n,label:o}:{type:r,candidateRef:e.dataset.composerCandidateRef??a,label:o},skillId:a,reference:i&&n?N(r,i,e.dataset.composerLabel??i,n,e.dataset.composerMarkdown):null});return}if(e.tagName===`BR`){n(`
|
|
2
|
-
`);return}let o=e.tagName===`DIV`||e.tagName===`P`,s=t.at(-1)?.node;o&&s&&!(s.type===`text`&&s.text.endsWith(`
|
|
3
|
-
`))&&n(`
|
|
4
|
-
`);for(let t of e.childNodes)r(t);let c=t.at(-1)?.node;o&&e.nextSibling&&!(c?.type===`text`&&c.text.endsWith(`
|
|
5
|
-
`))&&n(`
|
|
6
|
-
`)};for(let t of e.childNodes)r(t);let i=``,a=[],o=[],s={version:1,nodes:[]};for(let{node:e,skillId:n,reference:r}of t)s.nodes.push(e),e.type===`text`?i+=e.text:n&&(i+=k,a.push(n),o.push(r??null));return{fragment:{message:i,skillIds:a,references:o},document:s}}function Qe(e){let t=e.ownerDocument.getSelection(),n=t?.rangeCount?t.getRangeAt(0):null;if(!t||t.isCollapsed||!n||!e.contains(n.commonAncestorContainer))return null;let r=t=>{let n=t instanceof HTMLElement?t:t.parentElement,r=n?.closest(`.ai-chat-composer-skill-token`)??null;if(r&&e.contains(r))return r;let i=n?.closest(`[data-skill-id]`)??null;return i&&e.contains(i)?i:null},i=n.cloneRange(),a=r(i.startContainer),o=r(i.endContainer);a&&i.setStartBefore(a),o&&i.setEndAfter(o);let s=e.ownerDocument.createElement(`div`);s.append(i.cloneContents());let{fragment:c}=Ze(s);return c.message?{...c,range:i}:null}function $e(e){return e.split(k).length-1}function et(e){return e.type===`persistedReference`||e.type===`unsupportedReference`}function tt(e){return e.nodes.some(et)}function nt(e,t,n){let r=e.references?.[t];if(r)return r;let i=n.get(e.skillIds[t]??``);return i?N(`skill`,i.id,i.label):null}function rt(e,t){let n=0;return e.message.replaceAll(k,()=>{let r=nt(e,n,t);return n+=1,r?.markdown??k})}function it(e,t,n){let r=n.createElement(`div`);return e.message.split(k).forEach((i,a)=>{if(a>0){let i=nt(e,a-1,t);if(i){let e=n.createElement(`a`);e.setAttribute(`href`,`taskboard://composer-reference/v1/${i.kind}/${i.referenceKey}`),e.dataset.composerStableId=i.stableId,e.dataset.composerReferenceKey=i.referenceKey,e.dataset.composerKind=i.kind,e.dataset.composerLabel=i.label,e.dataset.composerMarkdown=i.markdown,e.textContent=i.label,r.append(e)}else r.append(k)}i.split(`
|
|
7
|
-
`).forEach((e,t)=>{t>0&&r.append(n.createElement(`br`)),r.append(e)})}),r.innerHTML}function at(e,t,n){return t.skillIds.length===0||!t.skillIds.every((e,r)=>nt(t,r,n)!==null)?!1:(e.preventDefault(),t.skillIds.every((e,r)=>nt(t,r,n)?.kind===`skill`)&&e.clipboardData.setData(ze,JSON.stringify({message:t.message,skillIds:t.skillIds})),e.clipboardData.setData(`text/plain`,rt(t,n)),e.clipboardData.setData(`text/html`,it(t,n,e.currentTarget.ownerDocument)),!0)}function ot(e){let t=e.trim();if(!t)return null;try{return t.startsWith(`file:`)?decodeURIComponent(new URL(t).pathname):t.startsWith(`/`)?decodeURIComponent(t.split(/[?#]/,1)[0]):null}catch{return null}}function st(e,t){if(!e)return null;let n=new DOMParser().parseFromString(e,`text/html`),r=new Map(t.map(e=>[e.path,e])),i=[],a=[],o=``,s=!1,c=e=>{o+=e.replaceAll(k,`�`)},l=e=>{if(e.nodeType===Node.TEXT_NODE){c(e.textContent??``);return}if(e.nodeType!==Node.ELEMENT_NODE)return;let t=e;if(M.has(t.tagName))return;if(t.tagName===`A`){let e=t.getAttribute(`href`)??``,n=/^taskboard:\/\/composer-reference\/v1\/(skill|agent)\/([A-Za-z0-9_-]+)$/.exec(e),c=n?.[1]===`agent`?`agent`:`skill`,l=n?ue(n[2],c):null;if(l&&n){let e=n[2],r=t.dataset.composerLabel||t.textContent||l;o+=k,i.push(l),a.push(N(c,l,r,e,t.dataset.composerReferenceKey===e?t.dataset.composerMarkdown:void 0)),s=!0;return}let u=ot(e),d=u?.endsWith(`/SKILL.md`)?r.get(u):null;if(d){o+=k,i.push(d.id),a.push(N(`skill`,d.id,d.label)),s=!0;return}}if(t.tagName===`BR`){o+=`
|
|
8
|
-
`;return}let n=j.has(t.tagName);n&&o&&!o.endsWith(`
|
|
9
|
-
`)&&(o+=`
|
|
10
|
-
`);for(let e of t.childNodes)l(e);n&&t.nextSibling&&!o.endsWith(`
|
|
11
|
-
`)&&(o+=`
|
|
12
|
-
`)};for(let e of n.body.childNodes)l(e);return s?{message:o,skillIds:i,references:a}:null}function ct(e,t){if(!e)return null;let n=new Map(t.map(e=>[e.id,e])),r=[],i=[],a=``,o=0;for(let t of e.matchAll(/\[((?:\\[\\[\]]|[^\]\\\r\n])+)]\((\/[^)\r\n]*\/SKILL\.md|taskboard:\/\/composer-reference\/v1\/(skill|agent)\/([A-Za-z0-9_-]+))\)/g)){let s=t[1].replace(/\\([\\[\]])/g,`$1`),c=t[3]===`agent`?`agent`:`skill`,l=t[4],u=l?ue(l,c):null,d=!l&&s.startsWith(`$`)?s.slice(1):null,ee=u??d;if(!ee)continue;let te=u?c:`skill`,f=n.get(ee),ne=N(te,ee,u?s:f?.label??ee,l||void 0,u?t[0]:void 0);a+=e.slice(o,t.index).replaceAll(k,`�`),a+=k,r.push(ee),i.push(ne),o=(t.index??0)+t[0].length}return r.length===0?null:(a+=e.slice(o).replaceAll(k,`�`),{message:a,skillIds:r,references:i})}function P(e,t,n){if(!e.contains(t))return null;let r=(t.textContent??``).slice(0,n),i=r.replaceAll(``,``),a=/(?:^|\s)([@/])([^\s@/]*)$/.exec(i);if(!a)return null;let o=a[1],s=r.lastIndexOf(o),c=e.ownerDocument.createRange();return c.setStart(t,s),c.setEnd(t,n),{trigger:o,query:a[2],range:c}}function lt(e){let t=e.ownerDocument.getSelection();if(!t||!t.isCollapsed||!t.focusNode)return null;if(t.focusNode.nodeType===Node.TEXT_NODE)return P(e,t.focusNode,t.focusOffset);if(!(t.focusNode instanceof HTMLElement)||!e.contains(t.focusNode))return null;let n=t.focusNode.childNodes[t.focusOffset-1]??null;for(;n?.lastChild;)n=n.lastChild;return n?.nodeType===Node.TEXT_NODE?P(e,n,n.textContent?.length??0):null}function ut(e){let t=e.ownerDocument.createTreeWalker(e,NodeFilter.SHOW_TEXT),n=null;for(let e=t.nextNode();e;e=t.nextNode())n=e;return n?P(e,n,n.length):null}function dt(e,t){if(t.container.nodeType===Node.TEXT_NODE){let n=t.container;return P(e,n,Math.min(t.offset+t.text.length,n.length))}if(!(t.container instanceof HTMLElement)||!e.contains(t.container))return null;let n=t.container.childNodes[t.offset];return n?.nodeType===Node.TEXT_NODE?P(e,n,Math.min(t.text.length,n.textContent?.length??0)):null}function ft(e){let t=e.ownerDocument.getSelection();if(!t||!t.isCollapsed||!t.focusNode)return null;let n=t.focusNode,r=null;if(n.nodeType===Node.TEXT_NODE){if((n.textContent??``).slice(0,t.focusOffset).replaceAll(``,``).length>0)return null;r=n.previousSibling}else n instanceof HTMLElement&&(r=n.childNodes[t.focusOffset-1]??null);for(;r?.nodeType===Node.TEXT_NODE&&!(r.textContent??``).replaceAll(``,``);)r=r.previousSibling;return r instanceof HTMLElement&&(r.dataset.skillId||r.dataset.composerCandidateRef)?r:null}function pt(e,t,n){let r=0;return e.replaceAll(k,()=>{let e=t[r]??``;return r+=1,`[${Je(n.get(e)||{id:e,label:e}).replaceAll(`[`,`\\[`).replaceAll(`]`,`\\]`)}](${A}${encodeURIComponent(e)})`})}function mt({skill:e,skillId:t}){return(0,D.jsxs)(`span`,{className:`ai-chat-skill-reference`,"data-skill-id":t||void 0,children:[(0,D.jsx)(_,{color:`currentColor`}),(0,D.jsx)(`span`,{children:Je(e||{id:t,label:t})})]})}var ht={plan:[`执行计划`,`Plan`],todo:[`任务进度`,`Task progress`],todo_list:[`任务进度`,`Task progress`],command:[`运行命令`,`Run command`],command_execution:[`运行命令`,`Run command`],file:[`文件修改`,`File changes`],file_change:[`文件修改`,`File changes`],mcp:[`调用 MCP`,`Use MCP`],mcp_tool_call:[`调用 MCP`,`Use MCP`],skill:[`调用 Skill`,`Use Skill`],web:[`搜索资料`,`Search the web`],web_search:[`搜索资料`,`Search the web`],error:[`执行失败`,`Failed`],"turn.failed":[`执行失败`,`Failed`]},F=[`警告`,`Warning`];function gt({failed:e,type:t}){return e||t===`error`||t===`turn.failed`?(0,D.jsx)(g,{name:`alert`}):t===`plan`?(0,D.jsx)(b,{color:`currentColor`}):t===`todo`||t===`todo_list`?(0,D.jsx)(he,{status:`todo`,color:`currentColor`}):t===`command`||t===`command_execution`?(0,D.jsx)(g,{name:`terminal`}):t===`file`||t===`file_change`?(0,D.jsx)(g,{name:`file`}):t===`mcp`||t===`mcp_tool_call`?(0,D.jsx)(x,{color:`currentColor`,size:16}):t===`skill`?(0,D.jsx)(_,{color:`currentColor`}):t===`web`||t===`web_search`?(0,D.jsx)(g,{name:`search`}):(0,D.jsx)(he,{status:`todo`,color:`currentColor`})}var _t=Symbol(`ai-chat-unavailable`);function I(e){return e instanceof Error?e.message:_t}function vt(e){return e===`read-only`||e===`workspace-write`||e===`danger-full-access`}function yt(e,t){let n=new Date(e);return Number.isNaN(n.getTime())?``:new Intl.DateTimeFormat(t,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`}).format(n)}function bt(e){if(typeof e!=`string`)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=e.text;return typeof t==`string`&&t.trim()?[t]:[]}):[]}catch{return[]}}function xt(e,t){let n=e.data?.files;if(Array.isArray(n)){let e=n.filter(e=>typeof e==`string`);if(e.length>0)return{kind:`lines`,summary:t(`查看文件`,`View files`),value:e}}if(e.type===`todo`||e.type===`todo_list`){let n=bt(e.data?.detail);if(n.length>0)return{kind:`lines`,summary:t(`查看任务`,`View tasks`),value:n}}for(let n of[`output`,`command`,`detail`,`path`]){let r=e.data?.[n];if(typeof r==`string`&&r.trim())return{kind:`pre`,summary:St(e,t),value:r}}return null}function St(e,t){return typeof e.data?.output==`string`&&e.data.output.trim()?t(`查看输出`,`View output`):typeof e.data?.command==`string`&&e.data.command.trim()?t(`查看命令`,`View command`):typeof e.data?.detail==`string`&&e.data.detail.trim()?t(`查看详情`,`View details`):typeof e.data?.path==`string`&&e.data.path.trim()?t(`查看路径`,`View path`):Array.isArray(e.data?.files)?t(`查看文件`,`View files`):t(`查看详情`,`View details`)}function L({children:e,skillsById:t}){return(0,D.jsx)(`div`,{className:`ai-chat-markdown`,children:(0,D.jsx)(h,{remarkPlugins:[me],components:{a:({node:e,href:n,...r})=>{if(n?.startsWith(A)){let e=decodeURIComponent(n.slice(15));return(0,D.jsx)(mt,{skill:t?.get(e),skillId:e})}return(0,D.jsx)(`a`,{...r,href:n,target:`_blank`,rel:`noreferrer`})}},children:e})})}function Ct({detail:e,label:t,content:n,running:r}){let[i,a]=(0,S.useState)(!1);return(0,D.jsxs)(`div`,{className:`ai-chat-thinking-detail${i?` is-open`:``}`,children:[(0,D.jsxs)(`button`,{"aria-expanded":i,className:`ai-chat-thinking-detail-trigger`,onClick:()=>a(e=>!e),onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),a(e=>!e))},title:n,type:`button`,children:[(0,D.jsxs)(`span`,{className:`ai-chat-thinking-step-label`,children:[t,r&&(0,D.jsx)(`span`,{"aria-hidden":`true`,children:`…`})]}),n&&(0,D.jsx)(`span`,{className:`ai-chat-thinking-step-description`,children:n}),(0,D.jsx)(g,{name:`chevronRight`})]}),(0,D.jsx)(`div`,{"aria-hidden":!i,className:`ai-chat-thinking-detail-panel`,inert:!i,children:(0,D.jsx)(`div`,{className:`ai-chat-thinking-detail-panel-inner`,children:e.kind===`lines`?(0,D.jsx)(`div`,{className:`ai-chat-thinking-detail-lines`,children:e.value.map((e,t)=>(0,D.jsx)(`span`,{children:e},`${e}-${t}`))}):(0,D.jsx)(`pre`,{children:(0,D.jsx)(`code`,{children:e.value})})})})]})}function wt({events:e,active:t}){let{text:n}=ne(),r=e.map(ke),i=r.includes(`running`)?`running`:r.includes(`failed`)?`failed`:`completed`,[a,o]=(0,S.useState)(t),s=(0,S.useRef)(t);(0,S.useEffect)(()=>{s.current!==t&&(s.current=t,o(t))},[t]);let c=i===`running`?n(`思考中`,`Thinking`):i===`failed`?n(`思考中断`,`Thinking stopped`):n(`已思考`,`Thought`);return(0,D.jsxs)(`section`,{className:`ai-chat-thinking-steps is-${i}`,children:[(0,D.jsxs)(`button`,{"aria-expanded":a,className:`ai-chat-thinking-header`,onClick:()=>o(e=>!e),type:`button`,children:[(0,D.jsx)(`span`,{className:`ai-chat-thinking-label`,children:c}),(0,D.jsx)(g,{className:`ai-chat-thinking-chevron`,name:`chevronRight`})]}),(0,D.jsx)(`div`,{"aria-hidden":!a,className:`ai-chat-thinking-panel${a?` is-open`:``}`,inert:!a,children:(0,D.jsx)(`div`,{className:`ai-chat-thinking-panel-clip`,children:(0,D.jsx)(`div`,{className:`ai-chat-thinking-list`,children:e.map((t,r)=>{let i=ke(t),a=xt(t,n),o=t.type===`error`&&t.data?.status===`warning`?F:ht[t.type],s=o?n(...o):n(`执行活动`,`Activity`),c=a?.kind===`lines`&&(t.type===`file`||t.type===`file_change`)?n(`${a.value.length} 个文件`,`${a.value.length} ${a.value.length===1?`file`:`files`}`):a?.kind===`lines`&&(t.type===`todo`||t.type===`todo_list`)?n(`${a.value.length} 项任务`,`${a.value.length} ${a.value.length===1?`task`:`tasks`}`):t.content.trim();return(0,D.jsx)(`div`,{className:`ai-chat-thinking-step-entry`,style:{animationDelay:`${Math.min(r*40,240)}ms`},children:(0,D.jsxs)(`div`,{className:`ai-chat-thinking-step is-${i}${r===e.length-1?` is-last`:``}`,children:[(0,D.jsxs)(`span`,{className:`ai-chat-thinking-step-rail`,"aria-hidden":`true`,children:[(0,D.jsx)(`span`,{className:`ai-chat-thinking-step-icon`,children:(0,D.jsx)(gt,{failed:i===`failed`,type:t.type})}),r!==e.length-1&&(0,D.jsx)(`span`,{className:`ai-chat-thinking-step-connector`})]}),(0,D.jsx)(`div`,{className:`ai-chat-thinking-step-content`,children:a?(0,D.jsx)(Ct,{content:c,detail:a,label:s,running:i===`running`}):(0,D.jsxs)(`div`,{className:`ai-chat-thinking-step-heading`,children:[(0,D.jsxs)(`span`,{className:`ai-chat-thinking-step-label`,children:[s,i===`running`&&(0,D.jsx)(`span`,{"aria-hidden":`true`,children:`…`})]}),c&&(0,D.jsx)(`span`,{className:`ai-chat-thinking-step-description`,title:c,children:c})]})})]})},typeof t.data?.itemId==`string`&&t.data.itemId?t.data.itemId:t.id)})})})})]})}function Tt({event:e}){let t=e.data?.attachments;if(!Array.isArray(t))return null;let n=t.flatMap(e=>{if(typeof e!=`object`||!e)return[];let t=e;return typeof t.filename!=`string`||typeof t.contentType!=`string`||typeof t.size!=`number`?[]:[{filename:t.filename,contentType:t.contentType,size:t.size}]});return n.length===0?null:(0,D.jsx)(`div`,{className:`ai-chat-event-attachments`,children:n.map((e,t)=>(0,D.jsxs)(`span`,{children:[(0,D.jsx)(se,{color:`currentColor`}),(0,D.jsx)(`span`,{children:e.filename})]},`${e.filename}-${t}`))})}function Et({activeRunId:e,events:t,skills:n}){let r=new Map(n.map(e=>[e.id,e])),i=e=>{let t=Qe(e.currentTarget);t&&at(e,t,r)};return(0,D.jsx)(D.Fragment,{children:E(t).reduce((e,t)=>{if(t.role===`user`||t.type===`user`||t.type===`user_message`||t.role===`assistant`||t.type===`assistant`||t.type===`agent_message`)return e.push(t),e;let n=e[e.length-1];return Array.isArray(n)?n.push(t):e.push([t]),e},[]).map(t=>{if(Array.isArray(t))return(0,D.jsx)(wt,{active:!!(e&&t.some(t=>t.runId===e)),events:t},`activity-${typeof t[0]?.data?.itemId==`string`&&t[0].data.itemId?t[0].data.itemId:t[0]?.id??`empty`}`);let n=t;return n.role===`user`||n.type===`user`||n.type===`user_message`?(0,D.jsxs)(`article`,{className:`ai-chat-user-message`,onCopy:i,children:[(0,D.jsx)(L,{skillsById:r,children:pt(n.content,Ye(n),r)}),(0,D.jsx)(Tt,{event:n})]},n.id):n.role===`assistant`||n.type===`assistant`||n.type===`agent_message`?(0,D.jsx)(`article`,{className:`ai-chat-assistant-message`,children:(0,D.jsx)(L,{children:n.content})},n.id):null})})}function R({available:i,projectId:o,issueId:f,codexProjectIdentity:p,onThreadsChange:m,openThreadRequest:h,onOpenThreadRequestHandled:se}){let{locale:ce,text:y}=ne(),[b,me]=(0,S.useState)(!1),[he,x]=(0,S.useState)(()=>de.getItem(Ne)===`history`),[C,w]=(0,S.useState)(null),[T,Oe]=(0,S.useState)([]),[E,ke]=(0,S.useState)(()=>de.getItem(Me)),[O,A]=(0,S.useState)(null),[j,M]=(0,S.useState)(null),[Ve,qe]=(0,S.useState)(null),[Je,N]=(0,S.useState)(null),[rt,it]=(0,S.useState)(null),[ot,P]=(0,S.useState)(!1),[pt,mt]=(0,S.useState)(!1),[ht,F]=(0,S.useState)(null),[gt,bt]=(0,S.useState)(``),[xt,St]=(0,S.useState)(null),[L,Ct]=(0,S.useState)([]),[wt,Tt]=(0,S.useState)([]),[R,z]=(0,S.useState)(null),[Dt,Ot]=(0,S.useState)(null),[kt,At]=(0,S.useState)(!1),[jt,Mt]=(0,S.useState)(null),[Nt,Pt]=(0,S.useState)(null),[Ft,It]=(0,S.useState)(0),[Lt,Rt]=(0,S.useState)(!1),[zt,Bt]=(0,S.useState)([]),[B,Vt]=(0,S.useState)(null),[Ht,Ut]=(0,S.useState)(!1),[Wt,Gt]=(0,S.useState)(``),[V,Kt]=(0,S.useState)(``),[H,qt]=(0,S.useState)(`workspace-write`),[Jt,Yt]=(0,S.useState)(!1),[Xt,Zt]=(0,S.useState)(null),[Qt,$t]=(0,S.useState)(!1),[en,tn]=(0,S.useState)(()=>window.innerWidth<=719?null:He()),[nn,rn]=(0,S.useState)(null),U=(0,S.useRef)(null),an=(0,S.useRef)(0),W=(0,S.useRef)(null),on=(0,S.useRef)(null),sn=(0,S.useRef)(null),cn=(0,S.useRef)(null),ln=(0,S.useRef)(null),un=(0,S.useRef)(null),dn=(0,S.useRef)(null),fn=(0,S.useRef)(null),G=(0,S.useRef)(E),pn=(0,S.useRef)(null),mn=(0,S.useRef)(null),hn=(0,S.useRef)(null),gn=(0,S.useRef)(b),_n=(0,S.useRef)(0),vn=(0,S.useRef)(0),yn=(0,S.useRef)(new Map),bn=B!==null,xn=h&&`threadId`in h?h.requestId:null,K=(0,S.useCallback)(e=>{G.current=e,ke(e)},[]);(0,S.useEffect)(()=>{G.current=E,E?de.setItem(Me,E):de.removeItem(Me)},[E]),(0,S.useEffect)(()=>{de.setItem(Ne,he?`history`:`thread`)},[he]),(0,S.useEffect)(()=>{gn.current=b,b&&(Ut(!1),tn(window.innerWidth<=719?null:He()))},[b]),(0,S.useEffect)(()=>{b&&E&&U.current?.focus()},[b,E,xn]),(0,S.useEffect)(()=>{function e(e){let t=fn.current;!t||e!==void 0&&t.pointerId!==e||(t.captureTarget.hasPointerCapture(t.pointerId)&&t.captureTarget.releasePointerCapture(t.pointerId),window.innerWidth>719&&de.setItem(Pe,JSON.stringify(t.geometry)),fn.current=null,rn(null))}function t(e){let t=fn.current;if(!t||t.pointerId!==e.pointerId)return;e.preventDefault();let n=Math.min(Le,window.innerWidth-Fe*2),r=Math.min(Ie,n),i=window.innerHeight-Fe*2,a=Math.min(Re,i),o=t.edge===`left`||t.edge===`top-left`,s=t.edge===`top`||t.edge===`top-left`;t.geometry={width:o?Math.min(n,Math.max(r,t.startWidth-(e.clientX-t.startX))):t.startWidth,height:s?Math.min(i,Math.max(a,t.startHeight-(e.clientY-t.startY))):t.startHeight},tn(t.geometry)}function n(t){e(t.pointerId)}function r(){e()}function i(){if(e(),window.innerWidth<=719){tn(null);return}tn(He())}return window.addEventListener(`pointermove`,t,{passive:!1}),window.addEventListener(`pointerup`,n),window.addEventListener(`pointercancel`,n),window.addEventListener(`blur`,r),window.addEventListener(`resize`,i),()=>{window.removeEventListener(`pointermove`,t),window.removeEventListener(`pointerup`,n),window.removeEventListener(`pointercancel`,n),window.removeEventListener(`blur`,r),window.removeEventListener(`resize`,i)}},[]);function Sn(e,t){if(window.innerWidth<=719)return;let n=dn.current;if(!n)return;e.preventDefault(),e.stopPropagation();let r=n.getBoundingClientRect();e.currentTarget.setPointerCapture(e.pointerId),fn.current={edge:t,pointerId:e.pointerId,startX:e.clientX,startY:e.clientY,startWidth:r.width,startHeight:r.height,geometry:{width:r.width,height:r.height},captureTarget:e.currentTarget},tn({width:r.width,height:r.height}),rn(t)}let q=(0,S.useCallback)(e=>{Oe(t=>[e,...t.filter(t=>t.id!==e.id)].sort((e,t)=>t.updatedAt.localeCompare(e.updatedAt)))},[]),Cn=(0,S.useCallback)((e,t)=>{let n=!1;for(let r of t){let t=yn.current.get(r.id);yn.current.set(r.id,r.status),t===`running`&&r.status!==`running`&&(!gn.current||G.current!==e)&&(n=!0)}n&&Ut(!0)},[]),wn=(0,S.useCallback)(async(e,t=!1)=>{let n=++_n.current;t||(vn.current=n,P(!0));try{let r=await l(e);if(n!==_n.current||G.current!==e)return;A(r),q(r.thread),Cn(e,r.runs),t||F(null)}catch(r){!t&&n===_n.current&&G.current===e&&F(I(r))}finally{!t&&n===vn.current&&P(!1)}},[Cn,q]),J=(0,S.useMemo)(()=>je(e=>wn(e,!0)),[wn]);(0,S.useEffect)(()=>()=>J.clear(),[J]);let Tn=(0,S.useCallback)(async()=>{try{let e=await a();Oe(e),e.length===0&&x(!1),ke(t=>{let n=t&&e.some(e=>e.id===t)?t:e[0]?.id??null;return G.current=n,n})}catch(e){F(I(e))}},[]);(0,S.useEffect)(()=>{if(!i){me(!1),Oe([]);return}Tn()},[i,Tn]),(0,S.useEffect)(()=>{m?.(i?T:[])},[i,m,T]),(0,S.useEffect)(()=>{if(A(null),!E)return;let e=!0,t=!1,n=!1;wn(E).finally(()=>{e=!1,t&&!n&&J.request(E)});let r=ge(E,()=>{e?t=!0:J.request(E)});return()=>{n=!0,r()}},[wn,J,E]);let En=T.filter(e=>e.status===`running`&&e.id!==E).map(e=>e.id);(0,S.useEffect)(()=>{if(!i||En.length===0)return;let e=je(async e=>{try{let t=await u(e);q(t.thread),Cn(e,t.runs)}catch{}}),t=En.map(t=>ge(t,()=>void e.request(t)));return()=>{e.clear();for(let e of t)e()}},[i,En.join(`,`),Cn,q,E]);let Dn=T.find(e=>e.id===E)??null,Y=O?.thread.origin.projectId??Dn?.origin.projectId??j?.projectId??o,On=O?.thread.origin??Dn?.origin,X=On?On.codexProjectKind===`remote`&&On.codexProjectId&&On.codexHostId?{codexProjectId:On.codexProjectId,codexProjectKind:`remote`,codexHostId:On.codexHostId,workspacePath:On.workspacePath}:null:j?.projectId===Y?j.codexProjectIdentity:o===Y?p:null,Z=Je===Y?Ve:null;(0,S.useEffect)(()=>{if(!i||!Y){qe(null),N(null),it(null);return}let t=new AbortController;return qe(null),N(null),it(null),e(Y,t.signal,X).then(e=>{t.signal.aborted||(qe(e),N(Y),it(null))},e=>{t.signal.aborted||e.name!==`AbortError`&&(qe(null),N(null),it(I(e)))}),()=>t.abort()},[i,Y,X?.codexHostId,X?.codexProjectId,X?.codexProjectKind,X?.workspacePath]);let kn=R?.trigger,An=R?.query,jn=(0,S.useMemo)(()=>kn?RegExp(`(?:^|\\s)${kn===`/`?`\\/`:`@`}([^\\s@/]*)$`).exec(gt)?.[1]??An??``:``,[kn,An,gt]);(0,S.useEffect)(()=>{if(!kn){Ot(null),At(!1),Mt(null);return}let e=new AbortController;return Ot(null),At(!0),Mt(null),oe({...Y?{projectId:Y}:{},...E?{threadId:E}:{},...!E&&X?X:{},trigger:kn,query:jn},e.signal).then(t=>{e.signal.aborted||(Ot(t),Pt(t.revision),At(!1))},t=>{e.signal.aborted||t.name!==`AbortError`&&(Mt(I(t)),At(!1))}),()=>e.abort()},[Y,X?.codexHostId,X?.codexProjectId,X?.codexProjectKind,X?.workspacePath,kn,jn,E]);let Mn=(0,S.useCallback)(e=>{Gt(e.model),Kt(e.reasoningEffort),qt(e.sandbox)},[]);(0,S.useEffect)(()=>{let e=O?.thread;if(e){Mn(e);return}let t=be(Z?.models??[],Wt,V);t&&(Gt(t.model),Kt(t.reasoningEffort));let n=j&&Z?.sandboxes.includes(H)?H:Z?.sandboxes.find(e=>e===`workspace-write`)??Z?.sandboxes.find(vt);n&&qt(n)},[Z,j,Mn,O?.thread.id]),(0,S.useEffect)(()=>{let e=un.current;!e||!b||(e.scrollTop=e.scrollHeight)},[b,O?.events.length,O?.thread.status]),(0,S.useEffect)(()=>{if(!b)return;function e(e){e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),typeof e.stopImmediatePropagation==`function`&&e.stopImmediatePropagation(),Kn(),me(!1))}return document.addEventListener(`keydown`,e,!0),()=>document.removeEventListener(`keydown`,e,!0)},[j,b,T]);let Nn=(0,S.useMemo)(()=>{let e=Dt?.candidates.filter(e=>e.trigger===R?.trigger)??[];return jn?e.slice(0,8):e},[Dt?.candidates,R?.trigger,jn]),Q=(0,S.useMemo)(()=>Nn.filter(e=>e.selectable),[Nn]),Pn=Z?.models.find(e=>e.slug===Wt)??null,Fn=(Z?.sandboxes??[]).filter(vt),In=O?.thread.currentRun??O?.runs.find(e=>e.status===`running`)??null,Ln=ht??rt,Rn=!!(E&&Xt===E),zn=ot||pt||Jt||Rn||!!(E&&!O),Bn=ot||!!(E&&!O),$=Rn,Vn=Ee(O?.thread.status??`idle`,gt,zn||O?.thread.status!==`running`&&Lt,L.length>0),Hn=Ht?`unread`:`idle`,Un=O?.thread.status===`failed`?[...O.events].reverse().find(e=>e.role===`user`||e.type===`user`||e.type===`user_message`)??null:null,Wn=Un&&!Xe(Un)?Un:null;(0,S.useEffect)(()=>{It(0)},[R?.trigger,jn]),(0,S.useEffect)(()=>{It(e=>Q.length===0?0:Math.min(e,Q.length-1))},[Q.length]),(0,S.useEffect)(()=>{let e=Q[Ft];e&&(cn.current?.querySelector(`[data-candidate-ref="${CSS.escape(e.candidateRef)}"]`))?.scrollIntoView({block:`nearest`})},[Ft,Q]),(0,S.useEffect)(()=>{$&&$t(!1)},[$]);function Gn(e){an.current+=1,U.current?.replaceChildren(),ln.current&&(ln.current.value=``),bt(``),Ct(t=>e?t.filter(t=>!e.has(t.id)):[]),Tt([]),Bt([]),z(null),Ot(null),Pt(null),Rt(!1),W.current=null,on.current=null,Vt(null),$t(!1),St(null),hn.current=null}(0,S.useEffect)(()=>{if(!i||!h||pn.current===h.requestId)return;if(`projectId`in h){pn.current=h.requestId,j||(mn.current=G.current),Gn(),M({projectId:h.projectId,issueId:h.issueId,codexProjectIdentity:h.projectId===o?p:null}),hn.current={projectId:h.projectId,issueId:h.issueId,codexProjectIdentity:h.projectId===o?p:null},A(null),K(null),x(!1),w(null),F(null),St(`composerText`in h?h.composerText:null),me(!0),se(h.requestId);return}if(!T.some(e=>e.id===h.threadId))return;pn.current=h.requestId;let e=G.current!==h.threadId,t=j!==null;mn.current=null,M(null),(e||t)&&(A(null),Gn()),K(h.threadId),!e&&(t||O?.thread.id!==h.threadId)&&wn(h.threadId),x(!1),w(null),F(null),me(!0),se(h.requestId)},[i,j,wn,h,se,K,O?.thread.id,T]),(0,S.useEffect)(()=>{let e=U.current;if(!b||xt===null||!e)return;an.current+=1,e.replaceChildren(document.createTextNode(xt)),bt(xt),St(null),e.focus();let t=document.createRange();t.selectNodeContents(e),t.collapse(!1);let n=window.getSelection();n?.removeAllRanges(),n?.addRange(t)},[b,xt]);function Kn(){if(!j)return;let e=mn.current,t=e&&T.some(t=>t.id===e)?e:T[0]?.id??null;mn.current=null,M(null),A(null),K(t),Gn()}(0,S.useEffect)(()=>{!j||j.projectId===o&&j.issueId===(f??null)||Kn()},[j?.issueId,j?.projectId,f,o]);function qn(){let e=ye(o??``,f);if(!e){F(y(`请先进入一个已映射的项目,再新建对话`,`Open a mapped project before you start a new chat.`));return}j||(mn.current=G.current),Gn(),M({projectId:e.projectId,issueId:e.issueId??null,codexProjectIdentity:p}),A(null),K(null),x(!1),w(null),F(null)}async function Jn(){let t=j??(o?{projectId:o,issueId:f,codexProjectIdentity:p}:null),n=ye(t?.projectId??``,t?.issueId??null);if(!n)return F(y(`请先进入一个已映射的项目,再新建对话`,`Open a mapped project before you start a new chat.`)),null;let r={model:Wt,reasoningEffort:V,sandbox:H};P(!0);try{let i=Je===n.projectId&&Z?Z:await e(n.projectId,void 0,t?.codexProjectIdentity),a=be(i.models,r.model,r.reasoningEffort),o=i.sandboxes.includes(r.sandbox)?r.sandbox:i.sandboxes.find(e=>e===`workspace-write`)??i.sandboxes.find(vt)??r.sandbox,s={model:a?.model??r.model,reasoningEffort:a?.reasoningEffort??r.reasoningEffort,sandbox:o},c=await d({...n,...s,...t?.codexProjectIdentity??{}});return q(c),K(c.id),A({thread:c,events:[],runs:[]}),mn.current=null,M(null),x(!1),F(null),c}catch(e){return F(I(e)),null}finally{P(!1)}}async function Yn(e){if(window.confirm(y(`删除本地对话“${e.title}”?`,`Delete local chat “${e.title}”?`))){Zt(e.id);try{await v(e.id);let t=T.filter(t=>t.id!==e.id);Oe(t),t.length===0&&x(!1),G.current===e.id&&(A(null),M(null),K(t[0]?.id??null),Gn()),F(null)}catch(e){F(I(e))}finally{Zt(null)}}}async function Xn(e){let n=O?.thread;if(!n)return;let r=n.id;Yt(!0);try{let n=await t(r,e);A(e=>Ae(e,r,n)),q(n),G.current===r&&F(null)}catch(e){G.current===r&&(Mn(n),F(I(e)))}finally{Yt(!1)}}async function Zn(e){let t=xe(e,V);w(null),Gt(e.slug),Kt(t),await Xn({model:e.slug,reasoningEffort:t})}async function Qn(e){w(null),Kt(e),await Xn({reasoningEffort:e})}async function $n(e){w(null),qt(e),await Xn({sandbox:e})}function er(){let e=U.current;if(!e)return;let{fragment:t}=Ze(e);an.current+=1,bt(t.message),Tt(t.skillIds),Bt(t=>t.filter(t=>e.contains(t.element))),!t.message&&e.childNodes.length>0&&e.replaceChildren()}function tr(e){let t=U.current,n=t?.ownerDocument.getSelection();if(!t||!n||!n.isCollapsed||!n.focusNode||!t.contains(n.focusNode)||e.inputType!==`insertText`||e.data===null){sn.current=null;return}sn.current={container:n.focusNode,offset:n.focusOffset,text:e.data}}function nr(e=!1){let t=U.current;if(!t)return;if(t.ownerDocument.activeElement!==t){sn.current=null,W.current=null,z(null);return}let n=e?sn.current:null,r=(e?ut(t):lt(t))??(n?dt(t,n):null),i=/(?:^|\s)([@/])([^\s@/]*)$/.exec((t.textContent??``).replaceAll(``,``)),a=r&&i?.[1]===r.trigger?{...r,query:i[2]}:r;sn.current=null,e&&(on.current=null);let o=a?`${a.trigger}${a.query}`:null;W.current=a?.range??null,Rt(a?.trigger===`/`),z(a&&on.current!==o?{trigger:a.trigger,query:a.query}:null)}function rr(e){let t=U.current,n=e.parentNode;if(!t||!n)return;let r=e.nextSibling,i=Array.prototype.indexOf.call(n.childNodes,e);r?.nodeType===Node.TEXT_NODE&&r.textContent?.startsWith(``)&&(r.textContent=r.textContent.slice(1)),e.remove(),Bt(t=>t.filter(t=>t.element!==e));let a=t.ownerDocument.getSelection(),o=t.ownerDocument.createRange();r?.isConnected&&r.nodeType===Node.TEXT_NODE?o.setStart(r,0):o.setStart(n,Math.min(i,n.childNodes.length)),o.collapse(!0),a?.removeAllRanges(),a?.addRange(o),er(),t.focus()}function ir(e,t){let n=U.current;if(!n||$e(e.message)!==e.skillIds.length)return!1;let r=new Map((Z?.skills??[]).map(e=>[e.id,e])),i=n.ownerDocument.getSelection(),a=t??(i?.rangeCount?i.getRangeAt(0):null);if(!a||!n.contains(a.commonAncestorContainer))return!1;let o=n.ownerDocument.createDocumentFragment(),s=[],c=0,l=0;for(let t=e.message.indexOf(k);t>=0;t=e.message.indexOf(k,c)){t>c&&o.append(n.ownerDocument.createTextNode(e.message.slice(c,t)));let i=e.skillIds[l];r.get(i);let a=nt(e,l,r);if(!a)return!1;let u=n.ownerDocument.createElement(`span`);u.className=`ai-chat-composer-skill-token`,u.dataset.skillId=a.stableId,u.dataset.composerStableId=a.stableId,u.dataset.composerReferenceKey=a.referenceKey,u.dataset.composerMarkdown=a.markdown,u.dataset.composerKind=a.kind,u.dataset.composerLabel=a.label,u.contentEditable=`false`,u.title=a.label,o.append(u,n.ownerDocument.createTextNode(``)),s.push({key:crypto.randomUUID(),candidateRef:a.stableId,label:a.label,kind:a.kind,element:u}),l+=1,c=t+k.length}if(c<e.message.length&&o.append(n.ownerDocument.createTextNode(e.message.slice(c))),!o.lastChild)return!1;let u=o.lastChild;return a.deleteContents(),n.innerHTML===`<br>`&&(n.replaceChildren(),a.selectNodeContents(n),a.collapse(!0)),a.insertNode(o),u.nodeType===Node.TEXT_NODE?a.setStart(u,u.textContent?.length??0):a.setStartAfter(u),a.collapse(!0),i?.removeAllRanges(),i?.addRange(a),er(),Bt(e=>[...e,...s]),z(null),W.current=null,n.focus(),!0}function ar(e){let t=U.current,n=t?ut(t)?.range??W.current:null;if(!R||!t||!n)return;let r=t.ownerDocument.createElement(`span`);r.className=`ai-chat-composer-skill-token`,r.dataset.composerCandidateRef=e.candidateRef,r.dataset.composerLabel=e.label,r.dataset.composerKind=e.kind;let i=e.persistence?.kind===e.kind?e.persistence:null,a=i?ue(i.referenceKey,e.kind):null;a&&i&&(e.kind===`skill`&&(r.dataset.skillId=a),r.dataset.composerStableId=a,r.dataset.composerReferenceKey=i.referenceKey,r.dataset.composerMarkdown=i.markdown),r.contentEditable=`false`,r.title=e.label;let o=t.ownerDocument.createTextNode(``);n.deleteContents(),n.insertNode(o),n.insertNode(r),n.setStart(o,o.length),n.collapse(!0),t.ownerDocument.getSelection()?.removeAllRanges(),t.ownerDocument.getSelection()?.addRange(n),Bt(t=>[...t,{key:crypto.randomUUID(),candidateRef:e.candidateRef,label:e.label,kind:e.kind,element:r}]),Pt(Dt?.revision??null),z(null),Rt(!1),W.current=null,on.current=null,er(),t.focus()}function or(e){let t=U.current,n=t?ut(t)?.range??W.current:null;!R||!t||!n||(n.deleteContents(),z(null),Rt(!1),W.current=null,on.current=null,er(),e.dispatch.handlerId===`new-conversation`?qn():e.dispatch.handlerId===`open-model-menu`?w(`model-list`):e.dispatch.handlerId===`open-reasoning-menu`?w(`effort-list`):e.dispatch.handlerId===`compact-conversation`&&E&&(P(!0),r(E).then(e=>{q(e),F(null)},e=>F(I(e))).finally(()=>P(!1))))}function sr(e){e.kind===`skill`||e.kind===`agent`?ar(e):or(e)}function cr(){return wt}async function lr(e,t,r,i=!0,a,o,l){if(zn||r===void 0&&Lt)return;let u=U.current,d=u?Ze(u):null,ee=an.current,f=e.trim(),ne=r??[...cr()],p=o??d?.document,m=l??Nt??void 0,h=p?tt(p):!1,re=p?.nodes.some(e=>e.type===`skill`||e.type===`agent`||e.type===`persistedReference`||e.type===`unsupportedReference`)??!1,g=!!(hn.current&&p?.nodes.every(e=>e.type===`text`));if(g&&(o||(p=Ce(e)),!m))try{let e=await oe({projectId:hn.current?.projectId,...X??{},trigger:`@`,query:``});if(!e.revision.trim())throw Error(y(`补全来源无效,请重新打开任务草稿`,`The completion source is invalid. Reopen the task draft.`));m=e.revision,Pt(e.revision)}catch(e){F(I(e));return}let ie=re||g;if(ie&&!h&&!m){F(y(`补全来源已失效,请重新选择 Skill`,`The completion source is stale. Select the Skill again.`));return}let _=a??L.map(e=>({filename:e.filename,contentType:e.contentType,dataBase64:e.dataBase64})),ae=new Set(L.filter(e=>_.some(t=>t.filename===e.filename&&t.contentType===e.contentType&&t.dataBase64===e.dataBase64)).map(e=>e.id));if(!f&&_.length===0)return;let v=O?.thread??null;if(De(v?.sandbox??H,t)){Vt({message:f,skillIds:ne,...ie&&p?{composerDocument:p,...m?{composerRevision:m}:{}}:{},attachments:_,clearSubmittedDraft:i});return}if(v||=await Jn(),!v)return;let se=r!==void 0||Je===v.origin.projectId?ne:[];Vt(null),F(null),mt(!0);try{let e;if(ie&&p)if(tt(p)){let t=p.nodes.filter(et),r=await s({contractVersion:n,projectId:v.origin.projectId,threadId:v.id,document:{version:1,nodes:t}});if(!r.ready)throw Error(y(`Skill 当前不可用,请稍后重试`,`The Skill is currently unavailable. Try again later.`));let i=0,a=[];for(let e of p.nodes)et(e)?(a.push(r.document.nodes[i]),i+=1):a.push(e);e=we({version:1,nodes:a}),m=r.revision,Pt(r.revision)}else e=we({version:1,nodes:p.nodes});let r=ie&&e&&m?Te(e,m,t,_):null,a=r?await c(v.id,r):await te(v.id,Se(f,se,t,_));i&&G.current===v.id&&(an.current===ee?Gn(ae):Ct(e=>e.filter(e=>!ae.has(e.id)))),yn.current.set(a.id,a.status),A(e=>e?.thread.id===v.id?{...e,thread:{...e.thread,status:`running`,currentRun:a,latestTodo:null},runs:[a,...e.runs.filter(e=>e.id!==a.id)]}:e),q({...v,status:`running`,currentRun:a,latestTodo:null}),G.current===v.id&&J.request(v.id)}catch(e){G.current===v.id&&F(I(e)),G.current===v.id&&J.request(v.id)}finally{mt(!1)}}function ur(e){return Array.from(e)}async function dr(e){if($)return;let t=ur(e);if(t.length!==0)try{let e=await Promise.all(t.map((e,t)=>new Promise((n,r)=>{let i=new FileReader;i.onload=()=>{if(typeof i.result!=`string`){r(Error(y(`无法读取附件 ${e.name}`,`Could not read attachment ${e.name}.`)));return}let a=i.result.indexOf(`,`);n({id:`${e.name}-${e.size}-${e.lastModified}-${Date.now()}-${t}`,filename:e.name,contentType:e.type||`application/octet-stream`,dataBase64:i.result.slice(a+1),...e.type.startsWith(`image/`)?{previewUrl:i.result}:{}})},i.onerror=()=>r(Error(y(`无法读取附件 ${e.name}`,`Could not read attachment ${e.name}.`))),i.readAsDataURL(e)})));Ct(t=>[...t,...e]),F(null)}catch(e){F(I(e))}}async function fr(e){let t=ur(e.target.files??[]);e.target.value=``,await dr(t)}function pr(e){return Array.from(e.dataTransfer.items).some(e=>e.kind===`file`)||e.dataTransfer.files.length>0}function mr(e){pr(e)&&(e.preventDefault(),!$&&$t(!0))}function hr(e){!Qt&&!pr(e)||(e.preventDefault(),e.dataTransfer.dropEffect=$?`none`:`copy`)}function gr(e){let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||$t(!1)}function _r(e){$t(!1);let t=ur(e.dataTransfer.files);t.length!==0&&(e.preventDefault(),!$&&dr(t))}function vr(e){let t=U.current;if(!t)return;let n=Qe(t);n&&at(e,n,new Map((Z?.skills??[]).map(e=>[e.id,e])))}function yr(e){let t=U.current;if(!t)return;let n=Qe(t);if(!n||!at(e,n,new Map((Z?.skills??[]).map(e=>[e.id,e]))))return;let r=n.range;r.deleteContents(),r.collapse(!0);let{startContainer:i,startOffset:a}=r,o=null,s=0;if(i.nodeType===Node.TEXT_NODE){let e=i;e.data[a]===``?(o=e,s=a):a===e.length&&e.nextSibling?.nodeType===Node.TEXT_NODE&&e.nextSibling.data.startsWith(``)&&(o=e.nextSibling)}else i.nodeType===Node.ELEMENT_NODE&&i.childNodes[a]?.nodeType===Node.TEXT_NODE&&i.childNodes[a].data.startsWith(``)&&(o=i.childNodes[a]);o&&(o.deleteData(s,1),!o.data&&o!==i&&o.remove()),er();let c=t.ownerDocument.getSelection();if(c?.removeAllRanges(),r.startContainer===t||t.contains(r.startContainer))c?.addRange(r);else{let e=t.ownerDocument.createRange();e.selectNodeContents(t),e.collapse(!1),c?.addRange(e)}z(null),W.current=null,t.focus()}function br(e){if($)return;let t=ur(e.clipboardData.files);if(e.preventDefault(),t.length>0){dr(t);return}let n=Z?.skills??[],r=new Map(n.map(e=>[e.id,e])),i=ve(e.clipboardData.getData(ze),r.keys());if(i&&ir(i))return;let a=st(e.clipboardData.getData(`text/html`),n);if(a&&ir(a))return;let o=e.clipboardData.getData(`text/plain`),s=ct(o,n);if(s&&ir(s))return;let c=o.replaceAll(k,`�`);c&&ir({message:c,skillIds:[]})}async function xr(e){if(e)try{await ee(e.id),G.current===e.threadId&&J.request(e.threadId)}catch(t){G.current===e.threadId&&F(I(t))}}function Sr(e){if(e.nativeEvent.isComposing||e.keyCode===229||Rn||e.key===`Enter`&&e.shiftKey)return;if(e.key===`Backspace`){let t=U.current?ft(U.current):null;if(t){e.preventDefault(),rr(t);return}}let t=e.key===`ArrowDown`||e.ctrlKey&&e.key.toLocaleLowerCase()===`n`?1:e.key===`ArrowUp`||e.ctrlKey&&e.key.toLocaleLowerCase()===`p`?-1:0;if(R&&t>0){e.preventDefault(),Q.length>0&&It(e=>(e+1)%Q.length);return}if(R&&t<0){e.preventDefault(),Q.length>0&&It(e=>(e-1+Q.length)%Q.length);return}if((e.key===`Enter`||e.key===`Tab`)&&R){e.preventDefault();let t=Q[Ft];t&&sr(t);return}if(e.key===`Enter`){if(Vn===`stop`)return;e.preventDefault(),Vn===`send`&&lr(gt,!1)}}return i?(0,D.jsxs)(`div`,{className:`ai-chat-root is-${Hn}`,onPointerDown:e=>{e.target.closest(`.ai-chat-menu-wrap`)||w(null)},children:[b&&(0,D.jsxs)(`section`,{ref:dn,className:`ai-chat-panel${nn?` is-resizing-${nn}`:``}`,style:en??void 0,"aria-label":y(`Codex AI 对话`,`Codex AI chat`),"data-screen-label":y(`Codex AI 对话`,`Codex AI chat`),children:[(0,D.jsx)(`div`,{className:`ai-chat-resize-handle is-top`,"aria-hidden":`true`,onPointerDown:e=>Sn(e,`top`)}),(0,D.jsx)(`div`,{className:`ai-chat-resize-handle is-left`,"aria-hidden":`true`,onPointerDown:e=>Sn(e,`left`)}),(0,D.jsx)(`div`,{className:`ai-chat-resize-handle is-top-left`,"aria-hidden":`true`,onPointerDown:e=>Sn(e,`top-left`)}),(0,D.jsxs)(`header`,{className:`ai-chat-panel-header`,children:[(0,D.jsxs)(`div`,{className:`ai-chat-panel-title`,children:[(0,D.jsx)(`strong`,{children:O?.thread.title??y(`新对话`,`New chat`)}),(0,D.jsx)(`span`,{children:O?.thread.origin.projectName??y(`选择对话或从当前项目新建`,`Select a chat or start one in the current project`)})]}),(0,D.jsx)(`button`,{type:`button`,"aria-label":y(`对话历史`,`Chat history`),"aria-pressed":he,title:y(`对话历史`,`Chat history`),onClick:()=>{x(e=>!e),w(null)},children:(0,D.jsx)(fe,{color:`currentColor`})}),(0,D.jsx)(`button`,{type:`button`,"aria-label":y(`新建对话`,`New chat`),title:o?y(`新建对话`,`New chat`):y(`请先进入项目`,`Open a project first`),disabled:!o||ot,onClick:qn,children:(0,D.jsx)(ae,{color:`currentColor`,size:15})}),(0,D.jsx)(`button`,{type:`button`,"aria-label":y(`关闭 AI 对话`,`Close AI chat`),title:y(`关闭`,`Close`),onClick:()=>{Kn(),me(!1)},children:(0,D.jsx)(g,{name:`close`})})]}),he&&(0,D.jsxs)(`div`,{className:`ai-chat-history`,"aria-label":y(`对话历史`,`Chat history`),children:[(0,D.jsxs)(`div`,{className:`ai-chat-history-heading`,children:[(0,D.jsx)(`strong`,{children:y(`对话历史`,`Chat history`)}),(0,D.jsx)(`span`,{children:T.length})]}),T.length>0?T.map(e=>(0,D.jsxs)(`div`,{className:`ai-chat-history-row${e.id===E?` is-active`:``}`,children:[(0,D.jsxs)(`button`,{type:`button`,onClick:()=>{e.id!==G.current&&Gn(),mn.current=null,M(null),K(e.id),x(!1)},children:[(0,D.jsx)(`span`,{className:`ai-chat-thread-status is-${e.status}`,"aria-hidden":`true`}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`strong`,{children:e.title}),(0,D.jsxs)(`small`,{children:[e.origin.projectName,` · `,yt(e.updatedAt,ce)]})]})]}),(0,D.jsx)(`button`,{className:`ai-chat-history-delete`,type:`button`,"aria-label":y(`删除对话 ${e.title}`,`Delete chat ${e.title}`),title:y(`删除本地记录`,`Delete local record`),disabled:e.status===`running`||Xt===e.id,onClick:()=>void Yn(e),children:(0,D.jsx)(ie,{color:`currentColor`})})]},e.id)):(0,D.jsx)(`p`,{children:y(`还没有本地对话`,`No local chats yet`)})]}),(0,D.jsx)(`div`,{className:`ai-chat-messages`,ref:un,"aria-busy":ot,"aria-live":`polite`,children:ot&&!O?(0,D.jsxs)(`div`,{className:`ai-chat-empty`,children:[(0,D.jsx)(`span`,{className:`ai-chat-spinner`}),y(`正在恢复对话…`,`Restoring chat…`)]}):O?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(Et,{activeRunId:In?.id??null,events:O.events,skills:Z?.skills??[]}),O.thread.status===`running`&&(0,D.jsxs)(`div`,{className:`ai-chat-running`,role:`status`,children:[(0,D.jsx)(`span`,{className:`ai-chat-spinner`}),y(`Codex 正在处理`,`Codex is working`)]}),Wn&&(0,D.jsxs)(`button`,{className:`ai-chat-retry`,type:`button`,onClick:()=>{lr(Wn.content,!1,Ye(Wn),!1,[])},children:[(0,D.jsx)(pe,{color:`currentColor`}),y(`重试上一条消息`,`Retry the previous message`)]})]}):(0,D.jsxs)(`div`,{className:`ai-chat-empty`,children:[(0,D.jsx)(fe,{color:`currentColor`}),(0,D.jsx)(`strong`,{children:o?y(`在当前项目中开始对话`,`Start a chat in the current project`):y(`打开一个历史对话`,`Open a chat from history`)}),(0,D.jsx)(`p`,{children:o?y(`Codex 会在新对话创建时记住当前项目。`,`Codex will remember the current project when it creates the new chat.`):y(`进入项目后可以新建对话。`,`Open a project to start a new chat.`)})]})}),Ln&&(0,D.jsxs)(`div`,{className:`ai-chat-error`,role:`alert`,children:[(0,D.jsx)(g,{name:`alert`}),(0,D.jsx)(`span`,{children:Ln===_t?y(`AI 对话暂时不可用`,`AI chat is temporarily unavailable.`):Ln})]}),(0,D.jsxs)(`div`,{className:`ai-chat-composer${Qt?` is-attachment-drag-active`:``}`,onDragEnter:mr,onDragOver:hr,onDragLeave:gr,onDrop:_r,children:[Qt&&(0,D.jsx)(`div`,{className:`ai-chat-attachment-drop-hint`,"aria-hidden":`true`,children:y(`松开添加文件`,`Drop files to add them`)}),(0,D.jsxs)(`div`,{className:`ai-chat-input-wrap`,children:[L.length>0&&(0,D.jsx)(`div`,{className:`ai-chat-composer-attachments`,children:L.map(e=>(0,D.jsxs)(`div`,{className:`ai-chat-composer-attachment${e.previewUrl?``:` is-file`}`,children:[e.previewUrl?(0,D.jsx)(`img`,{src:e.previewUrl,alt:``}):(0,D.jsxs)(`span`,{className:`ai-chat-composer-file`,children:[(0,D.jsx)(g,{name:`file`}),(0,D.jsx)(`span`,{children:e.filename})]}),(0,D.jsx)(`button`,{type:`button`,"aria-label":y(`移除附件 ${e.filename}`,`Remove attachment ${e.filename}`),title:y(`移除附件`,`Remove attachment`),onClick:()=>{Ct(t=>t.filter(t=>t.id!==e.id))},children:(0,D.jsx)(g,{name:`close`})})]},e.id))}),(0,D.jsx)(`div`,{ref:U,className:`ai-chat-composer-editor`,contentEditable:!Rn,"data-placeholder":y(`询问 Codex`,`Ask Codex`),role:`textbox`,"aria-label":y(`发送给 Codex 的消息`,`Message to Codex`),"aria-multiline":`true`,"aria-autocomplete":`list`,"aria-controls":R?`ai-chat-composer-candidates`:void 0,"aria-expanded":!!R,suppressContentEditableWarning:!0,onBeforeInput:e=>tr(e.nativeEvent),onInput:e=>{er(),e.nativeEvent.isComposing||(nr(!0),requestAnimationFrame(()=>nr()))},onClick:e=>{let t=e.target.closest(`.ai-chat-composer-skill-token`);if(t&&e.currentTarget.contains(t)){rr(t);return}nr()},onKeyDown:Sr,onKeyUp:e=>{(e.key===`ArrowLeft`||e.key===`ArrowRight`||e.key===`Home`||e.key===`End`||!R&&(e.key===`ArrowUp`||e.key===`ArrowDown`))&&nr()},onCompositionEnd:()=>nr(),onBlur:()=>z(null),onCopy:vr,onCut:yr,onPaste:br}),zt.map(e=>(0,_e.createPortal)((0,D.jsx)(`button`,{type:`button`,"aria-label":y(`移除${e.kind===`agent`?` Agent`:` Skill`} ${e.label}`,`Remove ${e.kind===`agent`?`Agent`:`Skill`} ${e.label}`),onMouseDown:e=>e.preventDefault(),onClick:()=>rr(e.element),disabled:e.unavailable,children:(0,D.jsxs)(`span`,{className:`ai-chat-skill-reference`,children:[e.kind===`agent`?(0,D.jsx)(fe,{color:`currentColor`}):(0,D.jsx)(_,{color:`currentColor`}),(0,D.jsx)(`span`,{children:e.label})]})}),e.element,e.key)),R&&(0,D.jsxs)(`div`,{ref:cn,id:`ai-chat-composer-candidates`,className:`ai-chat-skill-menu`,role:`listbox`,"aria-label":y(`Composer 补全`,`Composer completions`),"aria-busy":kt,children:[kt&&(0,D.jsxs)(`div`,{className:`ai-chat-composer-candidate-state`,role:`status`,children:[(0,D.jsx)(`span`,{className:`ai-chat-spinner`}),y(`正在读取补全…`,`Loading completions…`)]}),!kt&&jt&&(0,D.jsx)(`div`,{className:`ai-chat-composer-candidate-state is-error`,role:`alert`,children:jt===_t?y(`补全来源暂时不可用`,`Completion sources are temporarily unavailable.`):jt}),!kt&&!jt&&Nn.map(e=>{let t=Q.findIndex(t=>t.candidateRef===e.candidateRef),n=t===Ft&&t>=0,r=!e.selectable;return(0,D.jsxs)(`button`,{className:n?`is-selected`:void 0,type:`button`,role:`option`,"aria-selected":n,"aria-disabled":r,disabled:r,"data-candidate-ref":e.candidateRef,onPointerDown:e=>e.preventDefault(),onPointerEnter:()=>{t>=0&&It(t)},onClick:()=>{sr(e)},children:[e.kind===`skill`?(0,D.jsx)(_,{color:`currentColor`}):e.kind===`agent`?(0,D.jsx)(fe,{color:`currentColor`}):(0,D.jsx)(g,{name:`terminal`}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`strong`,{children:e.kind===`slashAction`?e.command:e.label}),(0,D.jsx)(`small`,{children:e.description??e.group}),r&&(0,D.jsx)(`em`,{children:y(`当前客户端未接入执行`,`No client handler available`)})]})]},e.candidateRef)}),!kt&&!jt&&Nn.length===0&&Dt&&(0,D.jsx)(`div`,{className:`ai-chat-composer-candidate-state`,role:`status`,children:y(`没有匹配的可选项`,`No matching completions`)})]})]}),(0,D.jsxs)(`div`,{className:`ai-chat-composer-toolbar`,children:[(0,D.jsx)(`input`,{ref:ln,className:`ai-chat-attachment-input`,type:`file`,multiple:!0,tabIndex:-1,onChange:e=>void fr(e)}),(0,D.jsx)(`button`,{className:`ai-chat-attachment-button`,type:`button`,"aria-label":y(`添加附件`,`Add attachment`),title:y(`添加附件`,`Add attachment`),disabled:$,onClick:()=>ln.current?.click(),children:(0,D.jsx)(ae,{color:`currentColor`,size:15})}),(0,D.jsxs)(`div`,{className:`ai-chat-menu-wrap ai-chat-permission-menu-wrap`,children:[(0,D.jsxs)(`button`,{className:`ai-chat-permission-trigger`,type:`button`,"aria-haspopup":`menu`,"aria-expanded":C===`sandbox`,disabled:!Z||O?.thread.status===`running`||Jt||Bn,onClick:()=>w(e=>e===`sandbox`?null:`sandbox`),children:[(0,D.jsx)(We,{sandbox:H}),y(...Be[H]),(0,D.jsx)(g,{name:`chevronDown`})]}),C===`sandbox`&&(0,D.jsxs)(`div`,{className:`ai-chat-option-menu ai-chat-permission-menu`,role:`menu`,"aria-label":y(`执行权限`,`Execution permissions`),children:[(0,D.jsxs)(`header`,{children:[(0,D.jsx)(`span`,{children:y(`应如何批准 Codex 操作?`,`How should Codex operations be approved?`)}),(0,D.jsx)(`a`,{href:`https://developers.openai.com/codex/security`,target:`_blank`,rel:`noreferrer`,children:y(`了解更多`,`Learn more`)})]}),Fn.map(e=>(0,D.jsxs)(`button`,{className:e===`danger-full-access`?`is-danger`:void 0,type:`button`,role:`menuitemradio`,"aria-checked":e===H,onClick:()=>void $n(e),children:[(0,D.jsx)(We,{sandbox:e}),(0,D.jsxs)(`span`,{children:[(0,D.jsx)(`strong`,{children:y(...Be[e])}),(0,D.jsx)(`small`,{children:y(...Ue[e])})]}),e===H&&(0,D.jsx)(g,{name:`check`})]},e))]})]}),(0,D.jsx)(`span`,{className:`ai-chat-toolbar-spacer`}),(0,D.jsxs)(`div`,{className:`ai-chat-menu-wrap ai-chat-model-menu-wrap`,children:[(0,D.jsxs)(`button`,{className:`ai-chat-model-trigger`,type:`button`,"aria-haspopup":`menu`,"aria-expanded":C===`model`||C===`model-list`||C===`effort-list`,disabled:!Z||O?.thread.status===`running`||Jt||Bn,onClick:()=>w(e=>e===`model`||e===`model-list`||e===`effort-list`?null:`model`),children:[(0,D.jsx)(`span`,{children:Ke(Pn?.displayName??(Wt||y(`模型`,`Model`)))}),(0,D.jsx)(`span`,{className:`ai-chat-model-effort`,children:Ge[V]?y(...Ge[V]):V||y(`推理`,`Reasoning`)}),(0,D.jsx)(g,{name:`chevronDown`})]}),C===`model`&&(0,D.jsxs)(`div`,{className:`ai-chat-option-menu ai-chat-config-menu`,role:`menu`,"aria-label":y(`模型与推理强度`,`Model and reasoning effort`),children:[(0,D.jsxs)(`button`,{type:`button`,onClick:()=>w(`model-list`),children:[(0,D.jsx)(`span`,{children:y(`模型`,`Model`)}),(0,D.jsx)(`strong`,{children:Ke(Pn?.displayName??Wt)}),(0,D.jsx)(g,{name:`chevronRight`})]}),(0,D.jsxs)(`button`,{type:`button`,onClick:()=>w(`effort-list`),children:[(0,D.jsx)(`span`,{children:y(`推理强度`,`Reasoning effort`)}),(0,D.jsx)(`strong`,{children:Ge[V]?y(...Ge[V]):V}),(0,D.jsx)(g,{name:`chevronRight`})]})]}),C===`model-list`&&(0,D.jsxs)(`div`,{className:`ai-chat-option-menu ai-chat-config-menu ai-chat-config-submenu ai-chat-model-list`,role:`menu`,"aria-label":y(`选择模型`,`Select model`),children:[(0,D.jsxs)(`header`,{children:[(0,D.jsx)(`button`,{type:`button`,"aria-label":y(`返回模型与推理强度`,`Back to model and reasoning effort`),onClick:()=>w(`model`),children:(0,D.jsx)(g,{name:`chevronLeft`})}),(0,D.jsx)(`strong`,{children:y(`模型`,`Model`)})]}),(Z?.models??[]).map(e=>(0,D.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":e.slug===Wt,onClick:()=>void Zn(e),children:[(0,D.jsx)(`span`,{children:(0,D.jsx)(`strong`,{children:Ke(e.displayName)})}),e.slug===Wt&&(0,D.jsx)(g,{name:`check`})]},e.slug))]}),C===`effort-list`&&Pn&&(0,D.jsxs)(`div`,{className:`ai-chat-option-menu ai-chat-config-menu ai-chat-config-submenu`,role:`menu`,"aria-label":y(`选择推理强度`,`Select reasoning effort`),children:[(0,D.jsxs)(`header`,{children:[(0,D.jsx)(`button`,{type:`button`,"aria-label":y(`返回模型与推理强度`,`Back to model and reasoning effort`),onClick:()=>w(`model`),children:(0,D.jsx)(g,{name:`chevronLeft`})}),(0,D.jsx)(`strong`,{children:y(`推理强度`,`Reasoning effort`)})]}),Pn.supportedReasoningEfforts.map(e=>(0,D.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":e===V,onClick:()=>void Qn(e),children:[(0,D.jsx)(`span`,{children:Ge[e]?y(...Ge[e]):e}),e===V&&(0,D.jsx)(g,{name:`check`})]},e))]})]}),Vn===`stop`?(0,D.jsx)(`button`,{className:`ai-chat-send-button is-stop`,type:`button`,"aria-label":y(`停止生成`,`Stop generating`),title:y(`停止`,`Stop`),onClick:()=>void xr(In),children:(0,D.jsx)(`span`,{className:`ai-chat-stop-mark`,"aria-hidden":`true`})}):(0,D.jsx)(`button`,{className:`ai-chat-send-button`,type:`button`,"aria-label":y(`发送消息`,`Send message`),title:y(`发送`,`Send`),disabled:Vn===`disabled`||ot||Jt||!!rt,onClick:()=>void lr(gt,!1),children:(0,D.jsx)(re,{color:`currentColor`})})]})]}),bn&&(0,D.jsx)(`div`,{className:`ai-chat-confirm-backdrop`,children:(0,D.jsxs)(`div`,{className:`ai-chat-confirm`,role:`alertdialog`,"aria-modal":`true`,"aria-labelledby":`ai-chat-confirm-title`,children:[(0,D.jsx)(`strong`,{id:`ai-chat-confirm-title`,children:y(`允许完全访问?`,`Allow full access?`)}),(0,D.jsx)(`p`,{children:y(`本次消息允许 Codex 访问工作区之外的文件和命令。确认只对本次发送生效。`,`This message lets Codex access files and commands outside the workspace. This approval applies only to this message.`)}),(0,D.jsxs)(`div`,{children:[(0,D.jsx)(`button`,{type:`button`,onClick:()=>Vt(null),children:y(`取消`,`Cancel`)}),(0,D.jsx)(`button`,{className:`is-danger`,type:`button`,onClick:()=>{B&&lr(B.message,!0,B.skillIds,B.clearSubmittedDraft,B.attachments,B.composerDocument,B.composerRevision)},children:y(`允许并发送`,`Allow and send`)})]})]})})]}),!b&&(0,D.jsxs)(`button`,{type:`button`,className:`ai-chat-launcher is-${Hn}`,"aria-label":y(`打开 AI 对话`,`Open AI chat`),"aria-expanded":`false`,title:y(`AI 对话`,`AI chat`),onClick:()=>me(!0),children:[(0,D.jsx)(le,{name:`aiLauncher`}),Hn!==`idle`&&(0,D.jsx)(`span`,{className:`ai-chat-launcher-state`,"aria-hidden":`true`})]})]}):null}export{R as AiChat};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@font-face{font-family:Inter;font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuOKfMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuI6fMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuGKYMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuFuYMZg.ttf)format("truetype")}@font-face{font-family:Inter;font-style:normal;font-weight:800;font-display:swap;src:url(https://fonts.gstatic.com/s/inter/v20/UcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuDyYMZg.ttf)format("truetype")}:root{--dhx-gantt-theme:terrace;--dhx-gantt-font-family:Inter, Helvetica, Arial, sans-serif;--dhx-gantt-font-size:14px;--dhx-gantt-heading-font-size:calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-heading-font-weight:600;--dhx-gantt-important-font-size:var(--dhx-gantt-font-size);--dhx-gantt-important-line-height:142%;--dhx-gantt-important-font-weight:500;--dhx-gantt-regular-font-size:var(--dhx-gantt-font-size);--dhx-gantt-regular-font-weight:400;--dhx-gantt-regular-line-height:142%;--dhx-gantt-caption-font-size:calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-caption-font-weight:400;--dhx-gantt-caption-line-height:132%;--dhx-gantt-base-colors-white:#fff;--dhx-gantt-base-colors-select:#e0e5f3;--dhx-gantt-base-colors-hover-color:#e0e0e0;--dhx-gantt-base-colors-border-light:#f0f0f0;--dhx-gantt-base-colors-border:#dfe0e1;--dhx-gantt-base-colors-icons:#a1a4a6;--dhx-gantt-base-colors-icons-active:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000 12.6%);--dhx-gantt-base-colors-icons-hover:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000 28.5%);--dhx-gantt-base-colors-disabled:#e9e9e9;--dhx-gantt-base-colors-readonly:var(--dhx-gantt-base-colors-icons);--dhx-gantt-base-colors-text-light:#555d63;--dhx-gantt-base-colors-text-base:#23272a;--dhx-gantt-base-colors-text-on-fill:#ffffffe6;--dhx-gantt-base-colors-background:#fff;--dhx-gantt-base-colors-background-alt:#f2f2f2;--dhx-gantt-base-colors-primary:#537cfa;--dhx-gantt-base-colors-primary-hover:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000 6%);--dhx-gantt-base-colors-primary-active:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 100%, #000 16.6%);--dhx-gantt-base-colors-primary-lighter:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-primary) 20%, #0000 100%);--dhx-gantt-base-colors-warning:#fab936;--dhx-gantt-base-colors-error:#e3334e;--dhx-gantt-base-colors-error-hover:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000 6%);--dhx-gantt-base-colors-error-active:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 100%, #000 16.6%);--dhx-gantt-base-colors-error-lighter:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-error) 20%, #0000 100%);--dhx-gantt-base-colors-error-text:var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-base-colors-success:#1bc297;--dhx-gantt-container-background:var(--dhx-gantt-base-colors-background);--dhx-gantt-container-color:var(--dhx-gantt-base-colors-text-base);--dhx-gantt-offtime-background:var(--dhx-gantt-base-colors-background-alt);--dhx-gantt-scale-background:var(--dhx-gantt-container-background);--dhx-gantt-scale-border-vertical:1px solid var(--dhx-gantt-base-colors-border-light);--dhx-gantt-scale-border-horizontal:1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-scale-color:var(--dhx-gantt-base-colors-text-light);--dhx-gantt-grid-body-background:transparent;--dhx-gantt-grid-scale-background:var(--dhx-gantt-scale-background);--dhx-gantt-grid-scale-color:var(--dhx-gantt-scale-color);--dhx-gantt-grid-scale-border-vertical:var(--dhx-gantt-scale-border-vertical);--dhx-gantt-timeline-scale-background:var(--dhx-gantt-scale-background);--dhx-gantt-timeline-scale-color:var(--dhx-gantt-scale-color);--dhx-gantt-timeline-scale-border-vertical:var(--dhx-gantt-scale-border-vertical);--dhx-gantt-grid-cell-border:1px solid transparent;--dhx-gantt-grid-row-border:var(--dhx-gantt-scale-border-horizontal);--dhx-gantt-base-transition:.2s ease;--dhx-gantt-box-shadow-s:0px 4px 24px 0px #2c2f3c14;--dhx-gantt-box-shadow-m:0px 4px 24px 0px #2c2f3c5c;--dhx-gantt-box-shadow-l:0px 4px 24px 0px #2c2f3c8f;--dhx-gantt-icon-size:1.5em;--dhx-gantt-base-module:4px;--dhx-gantt-base-padding:4px;--dhx-gantt-border-radius:var(--dhx-gantt-base-module);--dhx-gantt-transition:all .3s;--dhx-gantt-default-border:1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-header-border:var(--dhx-gantt-default-border);--dhx-gantt-task-blue:var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-green:#20b56d;--dhx-gantt-task-violet:#d071ef;--dhx-gantt-task-yellow:linear-gradient(180deg, #ffb725 0%, #ffbb25 31.25%, #faea27 100%);--dhx-gantt-baseline-background-0:#00b4ff;--dhx-gantt-baseline-background-1:#df6de3;--dhx-gantt-baseline-background-2:#ff957d;--dhx-gantt-baseline-background-3:#25c79d;--dhx-gantt-baseline-background-4:#ff6fb0;--dhx-gantt-baseline-background-5:#ffc470;--dhx-gantt-baseline-background-6:#fde720;--dhx-gantt-baseline-background-7:#47afd0;--dhx-gantt-baseline-background-8:#da9dff;--dhx-gantt-baseline-background-9:#bee964;--dhx-gantt-task-font-size:var(--dhx-gantt-regular-font-size);--dhx-gantt-task-line-height:var(--dhx-gantt-regular-line-height);--dhx-gantt-task-font-weight:var(--dhx-gantt-regular-font-weight);--dhx-gantt-task-background-primary:var(--dhx-gantt-base-colors-primary);--dhx-gantt-task-border-radius:var(--dhx-gantt-border-radius);--dhx-gantt-task-background:var(--dhx-gantt-task-blue);--dhx-gantt-task-border:none;--dhx-gantt-task-color:var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-project-color:var(--dhx-gantt-task-color);--dhx-gantt-task-line-text:var(--dhx-gantt-container-color);--dhx-gantt-task-row-border:1px solid var(--dhx-gantt-base-colors-border);--dhx-gantt-task-row-background:var(--dhx-gantt-container-background);--dhx-gantt-task-row-background--odd:var(--dhx-gantt-container-background);--dhx-gantt-task-progress-color:#00000026;--dhx-gantt-project-progress-color:var(--dhx-gantt-task-progress-color);--dhx-gantt-project-background:var(--dhx-gantt-task-green);--dhx-gantt-milestone-background:var(--dhx-gantt-task-violet);--dhx-gantt-task-marker-color:var(--dhx-gantt-task-background);--dhx-gantt-popup-background:var(--dhx-gantt-container-background);--dhx-gantt-popup-color:var(--dhx-gantt-container-color);--dhx-gantt-popup-border:none;--dhx-gantt-popup-border-radius:var(--dhx-gantt-border-radius);--dhx-gantt-tooltip-background:var(--dhx-gantt-base-colors-text-base);--dhx-gantt-tooltip-color:var(--dhx-gantt-container-background);--dhx-gantt-tooltip-border:none;--dhx-gantt-tooltip-border-radius:var(--dhx-gantt-popup-border-radius);--dhx-gantt-link-background:var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-background-hover:var(--dhx-gantt-base-colors-text-light);--dhx-gantt-link-critical-background:var(--dhx-gantt-base-colors-error);--dhx-gantt-link-handle-offset:8px;--dhx-gantt-link-handle-size:10px;--dhx-gantt-link-handle-border:var(--dhx-gantt-base-colors-icons);--dhx-gantt-link-handle-border-hover:var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background:var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background-hover:var(--dhx-gantt-base-colors-text-light);--dhx-gantt-progress-handle-border:var(--dhx-gantt-base-colors-border);--dhx-gantt-progress-handle-background:var(--dhx-gantt-base-colors-icons);--dhx-gantt-progress-handle-background-hover:var(--dhx-gantt-base-colors-icons-hover);--dhx-gantt-control-height:32px;--dhx-gantt-checkbox-height:20px;--dhx-gantt-lightbox_font-family:var(--dhx-gantt-font-family);--dhx-gantt-lightbox-font-size:var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-font-weight:var(--dhx-gantt-important-font-weight);--dhx-gantt-lightbox-background:var(--dhx-gantt-popup-background);--dhx-gantt-lightbox-border:var(--dhx-gantt-popup-border);--dhx-gantt-lightbox-control-border:var(--dhx-gantt-default-border);--dhx-gantt-lightbox-color:var(--dhx-gantt-popup-color);--dhx-gantt-lightbox-padding:12px;--dhx-gantt-lightbox-title-background:var(--dhx-gantt-base-colors-select);--dhx-gantt-lightbox-title-color:var(--dhx-gantt-lightbox-color);--dhx-gantt-lightbox-title-font-size:var(--dhx-gantt-heading-font-size);--dhx-gantt-lightbox-max-width:622px;--dhx-gantt-lightbox-wide-max-width:738px;--dhx-gantt-lightbox-width:560px;--dhx-gantt-btn-order:row-reverse;--dhx-gantt-btn-background:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-border-color:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-background-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-background-disabled:var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-base-colors-disabled);--dhx-gantt-btn-outline-background:transparent;--dhx-gantt-btn-outline-color:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-border-color:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-outline-background-hover:var(--dhx-gantt-base-colors-primary-lighter);--dhx-gantt-btn-outline-color-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-border-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-outline-background-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-color-active:var(--dhx-gantt-base-colors-text-on-fill);--dhx-gantt-btn-outline-border-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-outline-background-disabled:transparent;--dhx-gantt-btn-outline-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-outline-border-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-text-transform:none;--dhx-gantt-info-background:var(--dhx-gantt-popup-background);--dhx-gantt-info-color:var(--dhx-gantt-popup-color);--dhx-gantt-info-border:var(--dhx-gantt-popup-border);--dhx-gantt-info-shadow:var(--dhx-gantt-box-shadow-m);--dhx-gantt-modal-background:var(--dhx-gantt-popup-background);--dhx-gantt-modal-color:var(--dhx-gantt-popup-color);--dhx-gantt-modal-border:var(--dhx-gantt-popup-border);--dhx-gantt-modal-padding:16px;--dhx-gantt-modal-width:320px;--dhx-gantt-modal-border-radius:var(--dhx-gantt-popup-border-radius);--dhx-gantt-undo-delete-background:var(--dhx-gantt-base-colors-text-base);--dhx-gantt-undo-delete-color:var(--dhx-gantt-task-color)}:root[data-gantt-theme=dark]{--dhx-gantt-theme:dark;--dhx-gantt-base-colors-disabled:#3d3d3d;--dhx-gantt-base-colors-text-light:#aaa;--dhx-gantt-base-colors-text-base:#ffffffe6;--dhx-gantt-base-colors-background:#141414;--dhx-gantt-base-colors-background-alt:#383838;--dhx-gantt-base-colors-border:#4b4b4b;--dhx-gantt-base-colors-border-light:#4b4b4b;--dhx-gantt-navline-font-color:var(--dhx-gantt-base-colors-text-base);--dhx-gantt-base-colors-primary:#3b72f8;--dhx-gantt-base-colors-error:#eb284f;--dhx-gantt-base-colors-select:#2a2a2a;--dhx-gantt-base-colors-hover-color:#2a2a2a;--dhx-gantt-base-colors-icons:#aaa;--dhx-gantt-scale-color:var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background:#1b1b1c;--dhx-gantt-popup-border:1px solid #4b4b4b;--dhx-gantt-btn-font-weight:600;--dhx-gantt-undo-delete-background:var(--dhx-gantt-popup-background);--dhx-gantt-link-handle-border:var(--dhx-gantt-base-colors-border);--dhx-gantt-link-handle-background:var(--dhx-gantt-base-colors-background)}:root[data-gantt-theme=meadow]{--dhx-gantt-theme:meadow;--dhx-gantt-font-family:Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary:#0288d1;--dhx-gantt-base-colors-select:#ffebbc;--dhx-gantt-task-background:#e1ffd4;--dhx-gantt-base-colors-border:#cecece;--dhx-gantt-task-text-font-size:14px;--dhx-gantt-task-text-font-weight:500;--dhx-gantt-heading-font-size:22px;--dhx-gantt-heading-font-weight:300;--dhx-gantt-caption-font-size:14px;--dhx-gantt-caption-font-weight:400;--dhx-gantt-scale-color:#42464b;--dhx-gantt-container-color:#3f3f3f;--dhx-gantt-border-radius:0;--dhx-gantt-box-shadow-s:0 3px 5px 0 #0000001a;--dhx-gantt-box-shadow-m:0px 4px 24px 0px #2c2f3c5c;--dhx-gantt-box-shadow-l:0px 4px 24px 0px #2c2f3c8f;--dhx-gantt-scale-background:#f4f2ea;--dhx-gantt-task-color:#1e2022;--dhx-gantt-project-background:#c7d8f7;--dhx-gantt-milestone-background:#db7dc5;--dhx-gantt-task-border:1px solid #3588c5;--dhx-gantt-task-progress-color:#a7d991;--dhx-gantt-project-progress-color:#9ab9f1;--dhx-gantt-link-background:#ffb96d;--dhx-gantt-lightbox-title-background:#f4f2ea;--dhx-gantt-popup-background:#fcfaf3;--dhx-gantt-popup-color:var(--dhx-gantt-container-color);--dhx-gantt-popup-border:1px solid #cac8bd}:root[data-gantt-theme=skyblue]{--dhx-gantt-theme:skyblue;--dhx-gantt-font-family:Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary:#0288d1;--dhx-gantt-task-background:#eff6fb;--dhx-gantt-base-colors-border:#cecece;--dhx-gantt-task-text-font-size:14px;--dhx-gantt-task-text-font-weight:500;--dhx-gantt-heading-font-size:22px;--dhx-gantt-heading-font-weight:300;--dhx-gantt-caption-font-size:14px;--dhx-gantt-caption-font-weight:400;--dhx-gantt-scale-color:#42464b;--dhx-gantt-border-radius:0;--dhx-gantt-box-shadow-s:0 3px 5px 0 #0000001a;--dhx-gantt-box-shadow-m:0px 4px 24px 0px #2c2f3c5c;--dhx-gantt-box-shadow-l:0px 4px 24px 0px #2c2f3c8f;--dhx-gantt-scale-background:#dfedff;--dhx-gantt-task-color:#1e2022;--dhx-gantt-project-background:#eff6fb;--dhx-gantt-milestone-background:#db7dc5;--dhx-gantt-task-border:1px solid #3588c5;--dhx-gantt-task-progress-color:linear-gradient(0deg, #abcee8 0, #5aa0d3 36%, #bfdaee);--dhx-gantt-link-background:#4a8f43;--dhx-gantt-lightbox-title-background:#eff6fb}:root[data-gantt-theme=skyblue] .gantt_grid_scale,:root[data-gantt-theme=skyblue] .gantt_task_scale,:root[data-gantt-theme=skyblue] .gantt_task_vscroll{background-image:linear-gradient(#e4f0ff,#dfedff,#d5e8ff);box-shadow:inset 0 1px 1px #fff}:root[data-gantt-theme=broadway]{--dhx-gantt-theme:broadway;--dhx-gantt-font-family:Segoe UI, Arial, san-serif;--dhx-gantt-base-colors-primary:#0288d1;--dhx-gantt-base-colors-select:#fff3a1;--dhx-gantt-task-background:#17b2fb;--dhx-gantt-base-colors-border:#cecece;--dhx-gantt-halfhour-border:1px solid #e8e8e8;--dhx-gantt-task-title-font-size:12px;--dhx-gantt-task-text-font-size:14px;--dhx-gantt-task-text-font-weight:500;--dhx-gantt-heading-font-size:22px;--dhx-gantt-heading-font-weight:300;--dhx-gantt-caption-font-size:14px;--dhx-gantt-caption-font-weight:400;--dhx-gantt-scale-color:#767676;--dhx-gantt-border-radius:0;--dhx-gantt-box-shadow-s:0 3px 5px 0 #0000001a;--dhx-gantt-box-shadow-m:0px 4px 24px 0px #2c2f3c5c;--dhx-gantt-box-shadow-l:0px 4px 24px 0px #2c2f3c8f;--dhx-gantt-grid-scale-background:#4f4f4f;--dhx-gantt-grid-scale-border-vertical:1px solid #c1c1c1;--dhx-gantt-grid-scale-color:#e1e1e1;--dhx-gantt-timeline-scale-background:#dbdbdb;--dhx-gantt-timeline-scale-border-vertical:1px solid #ebebeb;--dhx-gantt-timeline-scale-color:#494949;--dhx-gantt-grid-body-background:#dbdbdb;--dhx-gantt-lightbox-title-background:#4f4f4f;--dhx-gantt-lightbox-title-color:#e1e1e1;--dhx-gantt-task-color:#fff;--dhx-gantt-link-background:#ffb96d;--dhx-gantt-project-background:#65c16f;--dhx-gantt-project-progress-color:#46ad51;--dhx-gantt-task-progress-color:#04a4f0;--dhx-gantt-milestone-background:#db7dc5}:root[data-gantt-theme=broadway] .gantt_grid_data{--dhx-gantt-task-row-background:var(--dhx-gantt-grid-body-background);--dhx-gantt-task-row-background--odd:var(--dhx-gantt-grid-body-background)}:root[data-gantt-theme=material]{--dhx-gantt-theme:material;--dhx-gantt-font-family:Roboto, Inter, Helvetica, Arial, sans-serif;--dhx-gantt-base-colors-primary:#448aff;--dhx-gantt-task-background:var(--dhx-gantt-base-colors-primary);--dhx-gantt-project-background:#1de9b6;--dhx-gantt-milestone-background:#ffc107;--dhx-gantt-task-progress-color:#0003;--dhx-gantt-project-color:#0009;--dhx-gantt-base-colors-border:#e0e0e0;--dhx-gantt-task-title-font-size:calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-task-text-font-size:var(--dhx-gantt-font-size);--dhx-gantt-task-text-font-weight:500;--dhx-gantt-heading-font-size:20px;--dhx-gantt-caption-font-size:var(--dhx-gantt-font-size);--dhx-gantt-caption-font-weight:500;--dhx-gantt-btn-font-weight:500;--dhx-gantt-heading-font-weight:500;--dhx-gantt-hours-font-size:calc(var(--dhx-gantt-font-size) - 2px);--dhx-gantt-base-colors-text-base:#000000bf;--dhx-gantt-base-transition:.15s ease;--dhx-gantt-header-border:1px solid transparent;--dhx-gantt-scale-color:#0000008a;--dhx-gantt-base-colors-select:#00c7b533;--dhx-gantt-base-colors-hover-color:var(--dhx-gantt-base-colors-select);--dhx-gantt-border-radius:0;--dhx-gantt-task-border-radius:18px;--dhx-gantt-btn-text-transform:uppercase;--dhx-gantt-btn-padding:1px 20px 0;--dhx-gantt-link-handle-size:16px;--dhx-gantt-progress-handle-background:#fff;--dhx-gantt-progress-handle-border:var(--dhx-gantt-base-colors-border);--dhx-gantt-box-shadow-s:0 3px 5px 0 #0000001a;--dhx-gantt-box-shadow-m:0px 4px 24px 0px #2c2f3c5c;--dhx-gantt-box-shadow-l:0px 4px 24px 0px #2c2f3c8f;--dhx-gantt-lightbox-title-background:var(--dhx-gantt-container-background);--dhx-gantt-lightbox-title-color:var(--dhx-gantt-base-colors-text-base);--dhx-gantt-lightbox-title-font-size:calc(var(--dhx-gantt-font-size) + 2px);--dhx-gantt-lightbox-padding:30px;--dhx-gantt-lightbox-width:610px;--dhx-gantt-lightbox-wide-max-width:640px;--dhx-gantt-btn-order:row;--dhx-gantt-btn-outline-border-color:transparent;--dhx-gantt-btn-outline-border-hover:transparent;--dhx-gantt-btn-outline-border-active:transparent;--dhx-gantt-btn-outline-border-color-disabled:transparent}:root[data-gantt-theme=material] .dhx_cal_ltitle{text-transform:uppercase;padding:18px var(--dhx-gantt-lightbox-padding) 8px;border-bottom-color:#0000;font-weight:400}:root[data-gantt-theme=material] .gantt_grid .gantt_grid_scale .gantt_grid_head_cell,:root[data-gantt-theme=material] .gantt_task .gantt_task_scale .gantt_scale_cell{text-transform:uppercase;font-weight:500}:root[data-gantt-theme=material] .dhx_cal_ltitle_controls{--dhx-gantt-base-colors-icons:var(--dhx-gantt-lightbox-title-color)}:root[data-gantt-theme=material] .gantt_cal_lsection{margin-top:12px;margin-bottom:4px}:root[data-gantt-theme=material] .gantt_cal_ltitle{padding:18px var(--dhx-gantt-lightbox-padding);border-bottom-color:#0000}:root[data-gantt-theme=material] .gantt_cal_lcontrols{padding-top:30px;padding-bottom:40px}:root[data-gantt-theme=material] .gantt_add,:root[data-gantt-theme=material] .gantt_grid_head_add{--dhx-gantt-base-colors-icons:#70d0c2;--dhx-gantt-base-colors-icons-active:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000 12.6%);--dhx-gantt-base-colors-icons-hover:color-mix(in hsl increasing hue, var(--dhx-gantt-base-colors-icons) 100%, #000 28.5%)}:root[data-gantt-theme=material] .gantt_grid_data .gantt_row,:root[data-gantt-theme=material] .gantt_grid_data .gantt_row.odd{transition:background var(--dhx-gantt-base-transition)}:root[data-gantt-theme=material] .gantt_grid_head_cell{transition:border-color ground var(--dhx-gantt-base-transition);border-right:1px solid #0000}:root[data-gantt-theme=material] .gantt_grid_scale:hover .gantt_grid_head_cell{border-right:var(--dhx-gantt-grid-scale-border-vertical)}:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap .gantt_grid_column_resize{transition:background var(--dhx-gantt-base-transition);background-color:#0000}:root[data-gantt-theme=material] .gantt_grid_column_resize_wrap:hover .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border)}:root[data-gantt-theme=material] div.gantt_grid_scale:after,:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{content:"";z-index:1;background-color:#0000;width:100%;height:1px;display:block;position:absolute;box-shadow:0 1px 2px #0003,0 2px 3px #0000001a}:root[data-gantt-theme=material] div.gantt_scale_line:last-child:after{bottom:-1px}:root[data-gantt-theme=material] .gantt_link_control{--dhx-gantt-link-handle-border:var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background:#fff;--dhx-gantt-link-handle-border-hover:var(--dhx-gantt-task-background);--dhx-gantt-link-handle-background-hover:#fff}:root[data-gantt-theme=material] .gantt_task_line.gantt_milestone{--dhx-gantt-task-border-radius:2px;margin-top:-1px}:root[data-gantt-theme=contrast-white]{--dhx-gantt-theme:contrast-white;--dhx-gantt-base-colors-disabled:#c2c2c2;--dhx-gantt-base-colors-text-light:#303030;--dhx-gantt-base-colors-text-base:#303030;--dhx-gantt-base-colors-background:#fff;--dhx-gantt-base-colors-background-alt:#929292;--dhx-gantt-base-colors-border:#4d595b;--dhx-gantt-base-colors-border-light:#4d595b;--dhx-gantt-base-colors-text-on-fill:#ffffffe6;--dhx-gantt-base-colors-primary:#0a47cd;--dhx-gantt-task-background:#0a47cd;--dhx-gantt-task-border:1px solid #0000001a;--dhx-gantt-project-background:#157949;--dhx-gantt-base-colors-warning:#fcba2e;--dhx-gantt-base-colors-success:#77d257;--dhx-gantt-base-colors-error:#d01e11;--dhx-gantt-base-colors-error-text:#141414;--dhx-gantt-btn-color:#fff;--dhx-gantt-btn-color-hover:#fff;--dhx-gantt-btn-color-active:#fff;--dhx-gantt-base-colors-select:#e7e5e5;--dhx-gantt-base-colors-hover-color:#e7e5e5;--dhx-gantt-base-colors-icons:#303030;--dhx-gantt-scale-color:var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background:#fff;--dhx-gantt-popup-border:1px solid #4d595b;--dhx-gantt-font-size:16px;--dhx-gantt-heading-font-size:24px;--dhx-gantt-important-font-size:16px;--dhx-gantt-regular-font-size:16px;--dhx-gantt-caption-font-size:16px;--dhx-gantt-btn-outline-color-hover:#212121;--dhx-gantt-btn-outline-color-active:#fff}:root[data-gantt-theme=contrast-black]{--dhx-gantt-theme:contrast-black;--dhx-gantt-base-colors-disabled:#3d3d3d;--dhx-gantt-base-colors-text-light:#cfcfcf;--dhx-gantt-base-colors-text-base:#fff;--dhx-gantt-base-colors-background:#141414;--dhx-gantt-base-colors-background-alt:#4f4f4f;--dhx-gantt-base-colors-border:#fffc;--dhx-gantt-base-colors-border-light:#fffc;--dhx-gantt-base-colors-text-on-fill:#141414;--dhx-gantt-base-colors-primary:#a395ff;--dhx-gantt-task-background:#a395ff;--dhx-gantt-project-background:#77d257;--dhx-gantt-milestone-background:#fcba2e;--dhx-gantt-task-border:1px solid #0000001a;--dhx-gantt-base-colors-warning:#694e02;--dhx-gantt-base-colors-success:#115700;--dhx-gantt-base-colors-error:#ffa7a0;--dhx-gantt-base-colors-error-text:#141414;--dhx-gantt-base-colors-select:#2a2a2a;--dhx-gantt-base-colors-hover-color:#2a2a2a;--dhx-gantt-base-colors-icons:#aaa;--dhx-gantt-scale-color:var(--dhx-gantt-base-colors-text-light);--dhx-gantt-popup-background:#1b1b1c;--dhx-gantt-undo-delete-background:var(--dhx-gantt-popup-background);--dhx-gantt-undo-delete-color:var(--dhx-gantt-base-colors-text-base);--dhx-gantt-popup-border:1px solid #4b4b4b;--dhx-gantt-font-size:16px;--dhx-gantt-heading-font-size:24px;--dhx-gantt-important-font-size:16px;--dhx-gantt-regular-font-size:16px;--dhx-gantt-caption-font-size:16px;--dhx-gantt-btn-outline-color-hover:var(--dhx-gantt-base-colors-text-light);--dhx-gantt-btn-outline-color-active:var(--dhx-gantt-base-colors-text-light)}.dhx_gantt_button--mixin{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding,0 20px);box-sizing:border-box;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight,normal);text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size:18px;flex-shrink:0;justify-content:center;align-items:center;gap:4px;line-height:142%;display:flex}.dhx_gantt_button--mixin:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_button--mixin:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_button--mixin:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.dhx_gantt_button_outline--mixin{--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);--dhx-gantt-btn-background:var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color:var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color:var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover:var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover:var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active:var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled:var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled:var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger--mixin{--dhx-gantt-icon-size:18px;--dhx-gantt-btn-background:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_danger_outline--mixin{--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);--dhx-gantt-btn-background:transparent;--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover:var(--dhx-gantt-base-colors-error-lighter);--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-background-disabled:transparent;--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-base-colors-icons)}.dhx_gantt_button_danger_link--mixin{--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background:transparent;--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color:transparent;--dhx-gantt-btn-background-hover:transparent;--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover:transparent;--dhx-gantt-btn-background-active:transparent;--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active:transparent;--dhx-gantt-btn-background-disabled:transparent;--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:transparent;padding:6px 0}.dhx_gantt_button_link--mixin{--dhx-gantt-icon-size:18px;--dhx-gantt-btn-background:transparent;--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color:transparent;--dhx-gantt-btn-background-hover:transparent;--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover:transparent;--dhx-gantt-btn-background-active:transparent;--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active:transparent;--dhx-gantt-btn-background-disabled:transparent;--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:transparent;padding:6px 0}.dhx_gantt_button_icon--mixin{--dhx-gantt-icon-size:18px;--dhx-gantt-btn-background:transparent;--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color:transparent;--dhx-gantt-btn-background-hover:transparent;--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover:transparent;--dhx-gantt-btn-background-active:transparent;--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active:transparent;--dhx-gantt-btn-background-disabled:transparent;--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:transparent;border-radius:50%;min-width:32px;height:32px;padding:6px 0}.dhx_gantt_button_icon--mixin:hover{--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-icons-hover)}.dhx_gantt_button_icon--mixin:active{--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-icons-active)}.dhx_gantt_button_icon--mixin:disabled{--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color-disabled)}.dhx_gantt_btn,.dhx_gantt_btn_danger,.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline,.dhx_gantt_btn_danger_link,.gantt_qi_big_icon,.gantt_btn_set{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding,0 20px);box-sizing:border-box;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight,normal);text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size:18px;flex-shrink:0;justify-content:center;align-items:center;gap:4px;line-height:142%;display:flex}.dhx_gantt_btn:hover,.dhx_gantt_btn_danger:hover,.dhx_gantt_btn_outline:hover,.dhx_gantt_btn_danger_outline:hover,.dhx_gantt_btn_danger_link:hover,.gantt_qi_big_icon:hover,.gantt_btn_set:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.dhx_gantt_btn:active,.dhx_gantt_btn_danger:active,.dhx_gantt_btn_outline:active,.dhx_gantt_btn_danger_outline:active,.dhx_gantt_btn_danger_link:active,.gantt_qi_big_icon:active,.gantt_btn_set:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.dhx_gantt_btn:disabled,.dhx_gantt_btn_danger:disabled,.dhx_gantt_btn_outline:disabled,.dhx_gantt_btn_danger_outline:disabled,.dhx_gantt_btn_danger_link:disabled,.gantt_qi_big_icon:disabled,.gantt_btn_set:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding,0 20px);box-sizing:border-box;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight,normal);text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size:18px;flex-shrink:0;justify-content:center;align-items:center;gap:4px;line-height:142%;display:flex}.gantt_popup_button:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_popup_button:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_popup_button:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_popup_button:not(.gantt_ok_button){--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);--dhx-gantt-btn-background:var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color:var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color:var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover:var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover:var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active:var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled:var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled:var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_ok_button{--dhx-gantt-icon-size:18px;--dhx-gantt-btn-background:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_btn_outline,.dhx_gantt_btn_danger_outline{--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);--dhx-gantt-btn-background:var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color:var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color:var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover:var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover:var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active:var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled:var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled:var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-btn-outline-border-color-disabled)}.dhx_gantt_button_danger,.dhx_gantt_button_danger_outline{--dhx-gantt-icon-size:18px;--dhx-gantt-btn-background:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-error-text);--dhx-gantt-btn-border-color:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-base-colors-error-active)}.dhx_gantt_button_link,.gantt_qi_big_icon{--dhx-gantt-icon-size:18px;--dhx-gantt-btn-background:transparent;--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color:transparent;--dhx-gantt-btn-background-hover:transparent;--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover:transparent;--dhx-gantt-btn-background-active:transparent;--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active:transparent;--dhx-gantt-btn-background-disabled:transparent;--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:transparent;padding:6px 0}@font-face{font-family:dhx-gantt-icons;src:url(data:font/woff;base64,d09GRgABAAAAAAMQAAsAAAAAAzQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAAC5AAAACkAAAAquPq49E9TLzIAAAH4AAAAQQAAAGA+AktxY21hcAAAAjwAAAA1AAAAPPEl8WZnbHlmAAABCAAAAGAAAABoxRIhgGhlYWQAAAGUAAAANgAAADZYjaBKaGhlYQAAAdwAAAAbAAAAJAJRATBobXR4AAABzAAAABAAAAAQA1IAAGxvY2EAAAGIAAAACgAAAAoAQAAYbWF4cAAAAWgAAAAeAAAAIAESADxuYW1lAAACdAAAAGAAAACQBkcflXBvc3QAAALUAAAADwAAACAABgAAeJxjYGQAgasM6xmYGBjMxc3D7e3W29szMEDE9wBlgOL2jOq19vZAKZj4Y0YJBj6gejlGNn5GNj1GW0YTO0bxa+xsbOyzOYR4eYU4VrMKCLCmszLxcZ3j4mNiBQAJfA5teJxjYGRgYGBhMABiEGACYi4gZGD4D+YzAAANwgFPAAAAAAAAAAwAGAA0AAAAAQAAAAEAADg6kFdfDzz1AAsBLAAAAAB8JbCAAAAAAHwlsIAAAP/1ASMBLAAAAAgAAgAAAAAAAAAAAAABLAAAASwAAAD6AAB4nGNgZGBg1GFggJD//zMqMzAyoAIWADe4AoMAeJxjYGHkZ5zAwMrAwPCc4RKQ1ILSExj4GHwZGJgYWJkZsIKANNcUhgMfuT/yM+oAudKM7gzcQJoRRRETADY6CfUAAAB4nGNgYGBiYGBgBmIRIMkIplkYNIA0G5BmZGD6yPOR//9/BoaP3CCa7xvfF7AqIAAAvlgKZwAAAHicTYk9DkBAGAVnWRKNUikOgHARhUIvCJsIiZ/E8X1Zis1r5s0AIQ0+SkcoUvjZI5b3se947XBAQv5zaP3IwkPBTM/GJSswDOzyTlomKTer1INO3iHW2JpRU1K9XNgN9XicY2BmgAAYjQYAAMIABwB4nGNgZGBg4GJQY9BgYHJx8wlh4MtJLMljkGBgAYoz/P/PAAcAbZcFXQAAAA==)format("woff"),url(data:font/woff2;base64,d09GMgABAAAAAAGgAAsAAAAAAzQAAAFXAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCoGYAA8Cmh8ATYCJAMQCwoABCAFgRAHIBt7AhCOwrZtU5bDMMQQhHg4j3h4fh3fuTPvSwodXjBLITo0KEQwlC1JFc7yTJ2aYWNZMOd5sOhYtHGM0ZZkn5cLWJCUrIGaHNJh4C0RSyyxCNpLIEHgIfPpqsmkApVGjcsWl00Hok4fWHuIk6AoAJCiLi4pwUdPMJn3S2ptgTIluSzccVRKoe8n/FNdTKMrFDgCAGTIkKNZLtAsGUepJGSfqj/VFQWfqsi132u/njaB8roF3cDBECLP6/bvtH3b8q/Xa83OtfeNiIs3b7V4D48Xzuw7/p7fTYMgfeUru2M/bGdXIwh47hF47Dl4G5xAcGN9BUGd+K28KqbhzMjnAmmKbzEUAsplIIhpiGmKIoYEACDZwpjGbwSSeQlkqFSJAkCpbVCRKoReikytXnK9+ESJVtOTpXpxWOkCOCbSW62AExKD3sKSKWxakZknM1tUdLwFs+blgAM=)format("woff2")}.dhx_gantt_icon:before{font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--dhx-gantt-base-colors-icons);font-style:normal;font-size:var(--dhx-gantt-icon-size,1.5em);justify-content:center;align-items:center;display:flex;font-family:dhx-gantt-icons!important;font-weight:400!important}.dhx_gantt_icon.dhx_gantt_icon_menu_down:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_menu_right:before{content:""}.dhx_gantt_icon.dhx_gantt_icon_rounded_arrow_right:before{content:""}.gantt_container{background:var(--dhx-gantt-container-background);color:var(--dhx-gantt-container-color);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);border:1px solid var(--dhx-gantt-base-colors-border);white-space:nowrap;position:relative;overflow:hidden}.gantt_touch_active{overscroll-behavior:none}.gantt_task_scroll{overflow-x:scroll}.gantt_task,.gantt_grid{vertical-align:top;display:inline-block;position:relative;overflow:hidden}.gantt_grid_scale,.gantt_task_scale{font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);border-bottom:var(--dhx-gantt-scale-border-horizontal);box-sizing:border-box}.gantt_grid_scale{background:var(--dhx-gantt-grid-scale-background);color:var(--dhx-gantt-grid-scale-color)}.gantt_task_scale{background:var(--dhx-gantt-timeline-scale-background);color:var(--dhx-gantt-timeline-scale-color)}.gantt_task_vscroll{background:var(--dhx-gantt-container-background)}.gantt_scale_line{box-sizing:border-box;border-top:var(--dhx-gantt-scale-border-horizontal)}.gantt_scale_line:first-child{border-top:none}.gantt_grid_head_cell{vertical-align:top;border-right:var(--dhx-gantt-grid-scale-border-vertical);text-align:center;cursor:default;box-sizing:border-box;height:100%;display:inline-block;position:relative;overflow:hidden}.gantt_scale_line{clear:both}.gantt_grid_data{background:var(--dhx-gantt-grid-body-background);width:100%;position:relative;overflow:hidden}.gantt_row{-webkit-user-select:none;user-select:none;position:relative}.gantt_add,.gantt_grid_head_add{cursor:pointer;opacity:.6;width:100%;height:100%;position:relative}.gantt_add:before,.gantt_grid_head_add:before{font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--dhx-gantt-base-colors-icons);font-style:normal;font-size:var(--dhx-gantt-icon-size,1.5em);justify-content:center;align-items:center;display:flex;font-family:dhx-gantt-icons!important;font-weight:400!important}.gantt_grid_head_cell.gantt_grid_head_add{opacity:.6;top:0}.gantt_grid_head_cell.gantt_grid_head_add:hover{opacity:1}.gantt_grid_data .gantt_row:hover,.gantt_grid_data .gantt_row.odd:hover{background-color:var(--dhx-gantt-base-colors-hover-color)}.gantt_grid_data .gantt_row:hover .gantt_add{opacity:1}.gantt_task_row,.gantt_row{border-bottom:var(--dhx-gantt-task-row-border);background:var(--dhx-gantt-task-row-background)}.gantt_row.odd,.gantt_task_row.odd{background:var(--dhx-gantt-task-row-background--odd)}.gantt_row,.gantt_cell,.gantt_task_row,.gantt_task_cell,.gantt_grid_head_cell,.gantt_scale_cell{box-sizing:border-box}.gantt_grid_head_cell,.gantt_scale_cell{line-height:inherit}.gantt_grid_scale .gantt_grid_column_resize_wrap{cursor:col-resize;width:13px;margin-left:-7px;position:absolute}.gantt_grid_column_resize_wrap .gantt_grid_column_resize{background-color:var(--dhx-gantt-base-colors-border);width:1px;height:100%;margin:0 auto}.gantt_task_grid_row_resize_wrap{cursor:row-resize;width:100%;height:13px;margin-top:-7px;position:absolute;left:0}.gantt_task_grid_row_resize_wrap .gantt_task_grid_row_resize{background-color:var(--dhx-gantt-base-colors-border-light);width:100%;height:1px;margin:0 auto;position:relative;top:6px}.gantt_drag_marker{pointer-events:none}.gantt_drag_marker.gantt_grid_resize_area,.gantt_drag_marker.gantt_row_grid_resize_area{background-color:#e7e7e780;width:100%;height:100%}.gantt_drag_marker.gantt_grid_resize_area{border-left:var(--dhx-gantt-scale-border-vertical);border-right:var(--dhx-gantt-scale-border-vertical)}.gantt_drag_marker.gantt_row_grid_resize_area{border-top:var(--dhx-gantt-scale-border-horizontal);border-bottom:var(--dhx-gantt-scale-border-horizontal)}.gantt_row{display:flex}.gantt_row>div{flex-grow:0;flex-shrink:0}.gantt_cell{vertical-align:top;border-right:var(--dhx-gantt-grid-cell-border);white-space:nowrap;height:100%;padding-left:6px;padding-right:6px;overflow:hidden}.gantt_cell_tree{flex-wrap:nowrap;gap:4px;display:flex}.gantt_grid_scale .gantt_last_cell,.gantt_grid_data .gantt_last_cell,.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell,.gantt_task_bg .gantt_last_cell{border-right-width:0}.gantt_task .gantt_task_scale .gantt_scale_cell.gantt_last_cell{border-right-width:1px}.gantt_task_bg{overflow:hidden}.gantt_scale_cell{white-space:nowrap;border-right:var(--dhx-gantt-grid-scale-border-vertical);text-align:center;height:100%;display:inline-block;position:relative;overflow:hidden}.gantt_task_cell{border-right:var(--dhx-gantt-timeline-scale-border-vertical);height:100%;display:inline-block}.gantt_layout_cell.gantt_ver_scroll{z-index:1;background-color:#0000;width:0;height:1px;position:absolute;right:0;overflow:hidden scroll}.gantt_ver_scroll>div{width:1px;height:1px}.gantt_hor_scroll{clear:both;background-color:#0000;width:100%;height:0;overflow:scroll hidden}.gantt_layout_cell .gantt_hor_scroll{position:absolute}.gantt_hor_scroll>div{width:5000px;height:1px}.gantt_tree_indent,.gantt_tree_icon{flex-grow:0;flex-shrink:0}.gantt_tree_indent{width:15px;height:100%}.gantt_tree_content,.gantt_tree_icon{vertical-align:top}.gantt_tree_icon{background-position:50%;background-repeat:no-repeat;width:28px;height:100%}.gantt_tree_content{white-space:nowrap;text-overflow:ellipsis;width:auto;min-width:0;height:100%;overflow:hidden}.gantt_tree_icon.gantt_open,.gantt_tree_icon.gantt_close{cursor:pointer;width:20px}.gantt_tree_icon.gantt_open:before,.gantt_tree_icon.gantt_close:before{font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--dhx-gantt-base-colors-icons);font-style:normal;font-size:var(--dhx-gantt-icon-size,1.5em);justify-content:center;align-items:center;display:flex;font-family:dhx-gantt-icons!important;font-weight:400!important}.gantt_tree_icon.gantt_open:before{content:""}.gantt_tree_icon.gantt_close:before{content:""}.gantt_tree_icon.gantt_blank{width:18px}.gantt_tree_icon.gantt_folder_open,.gantt_tree_icon.gantt_folder_closed,.gantt_tree_icon.gantt_file{display:none}.gantt_grid_head_cell .gantt_sort{width:7px;height:13px;position:absolute;top:0;right:5px}.gantt_grid_head_cell .gantt_sort.gantt_asc:before,.gantt_grid_head_cell .gantt_sort.gantt_desc:before{font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--dhx-gantt-base-colors-icons);font-style:normal;font-size:var(--dhx-gantt-icon-size,1.5em);justify-content:center;align-items:center;display:flex;font-family:dhx-gantt-icons!important;font-weight:400!important}.gantt_inserted,.gantt_updated{font-weight:700}.gantt_deleted{text-decoration:line-through}.gantt_invalid{background-color:#ffe0e0}.gantt_error{color:var(--dhx-gantt-base-colors-error)}.gantt_status{opacity:0;background:#9b9b9b1a;padding:5px 10px;transition:opacity .2s;position:absolute;top:1px;right:1px}.gantt_status.gantt_status_visible{opacity:1}#gantt_ajax_dots span{opacity:0;background-repeat:no-repeat;transition:opacity .2s}#gantt_ajax_dots span.gantt_dot_visible{opacity:1}.gantt_column_drag_marker{border:var(--dhx-gantt-grid-scale-border-vertical);opacity:.8;pointer-events:none}.gantt_grid_head_cell_dragged{border:var(--dhx-gantt-grid-scale-border-vertical);opacity:.3}.gantt_grid_target_marker{background-color:var(--dhx-gantt-base-colors-primary);width:2px;height:100%;position:absolute;top:0;transform:translate(-1px)}.gantt_grid_target_marker:before,.gantt_grid_target_marker:after{content:"";border:6px solid #0000;width:0;height:0;display:block;position:absolute;left:-5px}.gantt_grid_target_marker:before{border-top-color:var(--dhx-gantt-base-colors-primary)}.gantt_grid_target_marker:after{border-bottom-color:var(--dhx-gantt-base-colors-primary);bottom:0}.gantt_message_area{z-index:1000;width:320px;position:fixed;right:5px}.gantt-info{min-width:120px;font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);font-weight:var(--dhx-gantt-regular-font-weight);line-height:var(--dhx-gantt-regular-line-height);z-index:14;background:var(--dhx-gantt-info-background);color:var(--dhx-gantt-info-color);border:var(--dhx-gantt-info-border);box-shadow:var(--dhx-gantt-info-shadow);margin:5px 5px 10px;padding:12px;transition:all .5s;overflow:hidden}.gantt-info.hidden{border-width:0;height:0;margin:0;padding:0;overflow:hidden}.gantt_modal_box{min-width:300px;width:var(--dhx-gantt-modal-width);background:var(--dhx-gantt-modal-background);box-shadow:var(--dhx-gantt-box-shadow-l);border:var(--dhx-gantt-modal-border);z-index:18;border-radius:var(--dhx-gantt-modal-border-radius);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);color:var(--dhx-gantt-popup-color);line-height:150%;position:fixed;overflow:hidden}.gantt_popup_title{border-top-left-radius:var(--dhx-gantt-modal-border-radius);border-top-right-radius:var(--dhx-gantt-modal-border-radius);text-transform:uppercase;font-weight:var(--dhx-gantt-heading-font-weight);padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding);justify-content:center;align-items:center;display:flex}.gantt_popup_text{padding:var(--dhx-gantt-modal-padding);justify-content:center;align-items:center;display:flex}.gantt_popup_controls{flex-direction:var(--dhx-gantt-btn-order);padding:calc(var(--dhx-gantt-modal-padding)/2) var(--dhx-gantt-modal-padding);align-items:center;gap:12px;display:flex}.gantt-info,.gantt_popup_button,.gantt_button{-webkit-user-select:none;user-select:none;cursor:pointer}.gantt_popup_text{overflow:hidden}div.dhx_modal_cover{opacity:.2;z-index:17;background:#44494e;border:none;width:100%;height:100%;position:fixed;top:0;left:0}.gantt_popup_controls{border-radius:var(--dhx-gantt-border-radius)}.gantt_message_area .gantt-error{--dhx-gantt-info-background:var(--dhx-gantt-base-colors-error);--dhx-gantt-info-color:var(--dhx-gantt-base-colors-text-on-fill)}.gantt_message_area .gantt-warning{--dhx-gantt-info-background:var(--dhx-gantt-base-colors-warning);--dhx-gantt-info-color:var(--dhx-gantt-base-colors-text-on-fill)}.gantt_grid div,.gantt_data_area div{-ms-touch-action:none;-webkit-tap-highlight-color:#0000}.gantt_data_area{-webkit-user-select:none;user-select:none;position:relative;overflow:hidden}.gantt_links_area{position:absolute;top:0;left:0}.gantt_task_content,.gantt_task_progress,.gantt_side_content{line-height:inherit;height:100%;overflow:hidden}.gantt_task_content{font-size:var(--dhx-gantt-task-font-size);color:var(--dhx-gantt-task-color);cursor:pointer;white-space:nowrap;text-align:center;width:100%;padding-top:1px;position:absolute;top:0}.gantt_task_progress{text-align:center;z-index:0;background:var(--dhx-gantt-task-progress-color)}.gantt_task_progress_wrapper{border-radius:inherit;width:100%;height:100%;position:relative;overflow:hidden}.gantt_task_line{border-radius:var(--dhx-gantt-task-border-radius);box-sizing:border-box;background:var(--dhx-gantt-task-background);border:var(--dhx-gantt-task-border);-webkit-user-select:none;user-select:none;position:absolute}.gantt_task_line.gantt_drag_move div{cursor:move}.gantt_touch_move,.gantt_touch_progress,.gantt_touch_resize{transform-origin:50%;transform:scale(1.02,1.1)}.gantt_touch_progress .gantt_task_progress_drag,.gantt_touch_resize .gantt_task_drag{transform-origin:50%;transform:scaleY(1.3)}.gantt_side_content{white-space:nowrap;color:var(--dhx-gantt-base-colors-text-light);font-size:calc(var(--dhx-gantt-task-font-size) - 1px);position:absolute;top:0}.gantt_side_content.gantt_left{padding-right:var(--dhx-gantt-base-padding);right:100%}.gantt_side_content.gantt_right{padding-left:var(--dhx-gantt-base-padding);left:100%}.gantt_side_content.gantt_link_crossing{margin-top:-10px}.gantt_task_link .gantt_line_wrapper,.gantt_link_arrow,.gantt_link_corner{cursor:pointer;position:absolute}.gantt_line_wrapper div{background-color:var(--dhx-gantt-link-background)}.gantt_link_corner{border-color:var(--dhx-gantt-link-background);background-color:#0000;box-sizing:content-box!important}.gantt_task_link:hover{--dhx-gantt-link-background:var(--dhx-gantt-link-background-hover)}.gantt_task_link:hover>div{z-index:1}.gantt_task_link div.gantt_link_arrow{color:var(--dhx-gantt-link-background);line-height:normal}.gantt_task_link div.gantt_link_arrow:before{font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--dhx-gantt-base-colors-icons);font-style:normal;font-size:var(--dhx-gantt-icon-size,1.5em);content:"";justify-content:center;align-items:center;display:flex;font-family:dhx-gantt-icons!important;font-weight:400!important}.gantt_link_control{width:calc(var(--dhx-gantt-link-handle-offset) + var(--dhx-gantt-link-handle-size));transition:all var(--dhx-gantt-base-transition);align-items:center;display:flex;position:absolute;top:50%}.gantt_link_control div{cursor:pointer;box-sizing:border-box;border:2px solid var(--dhx-gantt-link-handle-border);height:var(--dhx-gantt-link-handle-size);width:var(--dhx-gantt-link-handle-size);background:var(--dhx-gantt-link-handle-background);border-radius:50%;display:none;position:relative}.gantt_link_control div:hover{--dhx-gantt-link-handle-background:var(--dhx-gantt-link-handle-background-hover);--dhx-gantt-link-handle-border:var(--dhx-gantt-link-handle-border-hover)}.gantt_link_control.task_left{justify-content:flex-start;left:0;transform:translate(-100%,-50%)}.gantt_link_control.task_right{justify-content:flex-end;right:0;transform:translate(100%,-50%)}.gantt_task_line.gantt_link_source .gantt_link_control div,.gantt_task_line.gantt_selected .gantt_link_control div,.gantt_task_line:hover .gantt_link_control div,.gantt_task_line.gantt_drag_move .gantt_link_control div,.gantt_task_line.gantt_drag_resize .gantt_link_control div,.gantt_task_line.gantt_link_source .gantt_task_drag,.gantt_task_line.gantt_selected .gantt_task_drag,.gantt_task_line:hover .gantt_task_drag,.gantt_task_line.gantt_drag_move .gantt_task_drag,.gantt_task_line.gantt_drag_resize .gantt_task_drag{display:block}.gantt_task_line.gantt_selected .gantt_task_progress_drag,.gantt_task_line:hover .gantt_task_progress_drag,.gantt_task_line.gantt_drag_progress .gantt_task_progress_drag{display:flex}.gantt_link_target .gantt_link_control div{display:block}.gantt_link_source,.gantt_link_target{box-shadow:0 0 3px var(--dhx-gantt-base-colors-primary)}.gantt_link_target.link_start_allow,.gantt_link_target.link_finish_allow{box-shadow:0 0 3px var(--dhx-gantt-base-colors-success)}.gantt_link_target.link_start_deny,.gantt_link_target.link_finish_deny{box-shadow:0 0 3px var(--dhx-gantt-base-colors-error)}.gantt_link_from_start .gantt_link_control.task_start_date div,.gantt_link_from_end .gantt_link_control.task_end_date div,.link_start_allow .gantt_link_control.task_start_date div,.link_finish_allow .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border:var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background:var(--dhx-gantt-base-colors-primary)}.link_start_deny .gantt_link_control.task_start_date div,.link_finish_deny .gantt_link_control.task_end_date div{--dhx-gantt-link-handle-border:var(--dhx-gantt-link-handle-border-hover);--dhx-gantt-link-handle-background:var(--dhx-gantt-base-colors-error)}.gantt_link_arrow_left{transform:rotate(180deg)}.gantt_task_drag,.gantt_task_progress_drag{cursor:ew-resize;display:none;position:absolute}.gantt_task_drag.task_right{cursor:e-resize}.gantt_task_drag.task_left{cursor:w-resize}.gantt_task_drag{z-index:1;width:8px;height:50%;min-height:16px;top:-1px}.gantt_task_drag.task_left{left:-7px}.gantt_task_drag.task_right{right:-7px}.gantt_task_progress_drag{z-index:1;align-items:flex-end;height:70%;min-height:12px;bottom:-3px;transform:translate(-50%)}.gantt_task_progress_drag:hover{--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-icons-hover)}.gantt_link_tooltip{background-color:var(--dhx-gantt-popup-background);border-left:1px solid var(--dhx-gantt-base-colors-border);border-top:1px solid var(--dhx-gantt-base-colors-border);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);color:var(--dhx-gantt-popup-color);padding:var(--dhx-gantt-base-padding);line-height:var(--dhx-gantt-regular-line-height);box-shadow:3px 3px 3px #0003}.gantt_link_direction{border:none;border-bottom:2px dashed var(--dhx-gantt-base-colors-primary);transform-origin:0 0;z-index:2;height:0;margin-left:1px;position:absolute}.gantt_grid_data .gantt_row.gantt_selected,.gantt_grid_data .gantt_row.odd.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}.gantt_row_project{font-weight:500}.gantt_task_row.odd.gantt_selected,.gantt_task_row.gantt_selected{background-color:var(--dhx-gantt-base-colors-select)}.gantt_task_line.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_cal_quick_info.gantt_project,.gantt_task_line.gantt_project{--dhx-gantt-task-color:var(--dhx-gantt-project-color);--dhx-gantt-task-background:var(--dhx-gantt-project-background);--dhx-gantt-task-progress-color:var(--dhx-gantt-project-progress-color)}.gantt_task_line.gantt_project.gantt_task_line_planned{--dhx-gantt-task-background:var(--dhx-gantt-base-colors-text-light)}.gantt_task_line_planned{--dhx-gantt-scheduled-summary-bracket-size:8px}.gantt_task_line_planned:before,.gantt_task_line_planned:after{content:"";border-style:solid;border-color:#0000;width:0;height:0;position:absolute;top:0}.gantt_task_line_planned:before{border-width:var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0 0;border-right-color:var(--dhx-gantt-task-background);transform:rotate(180deg)}.gantt_task_line_planned:after{border-width:0 var(--dhx-gantt-scheduled-summary-bracket-size) var(--dhx-gantt-scheduled-summary-bracket-size) 0;border-right-color:var(--dhx-gantt-task-background);right:0}.gantt_task_line_actual{opacity:.3;--dhx-gantt-task-border-radius:2px}.gantt_task_line.gantt_project.gantt_project_scheduling_conflict .gantt_task_line_actual{--dhx-gantt-task-background:var(--dhx-gantt-base-colors-error)}.gantt_task_line.gantt_project.gantt_selected{box-shadow:var(--dhx-gantt-box-shadow-s)}.gantt_task_line.gantt_milestone{--dhx-gantt-task-background:var(--dhx-gantt-milestone-background);visibility:hidden;box-sizing:content-box;border:none}.gantt_task_line.gantt_milestone div{visibility:visible}.gantt_task_line.gantt_milestone .gantt_task_content{background:inherit;border:inherit;border-radius:inherit;box-sizing:border-box;border-width:1px;transform:rotate(45deg)}.gantt_critical_task{--dhx-gantt-task-background:var(--dhx-gantt-link-critical-background)}.gantt_critical_task .gantt_task_progress{--dhx-gantt-task-progress:#0006}.gantt_critical_link{--dhx-gantt-link-background:var(--dhx-gantt-link-critical-background)}.gantt_link_arrow{--dhx-gantt-base-colors-icons:var(--dhx-gantt-link-background)}.gantt_row:focus,.gantt_cell:focus,.gantt_btn_set:focus,.gantt_qi_big_icon:focus,.gantt_popup_button:focus,.gantt_grid_head_cell:focus{box-shadow:inset 0 0 1px 1px var(--dhx-gantt-base-colors-primary)}.gantt_split_parent,.gantt_split_subproject{opacity:.1;pointer-events:none}.gantt_rollup_child .gantt_link_control,.gantt_rollup_child:hover .gantt_link_control{display:none}.gantt_unselectable,.gantt_unselectable div{-webkit-user-select:none;user-select:none}.gantt_common_input{background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-size);box-sizing:border-box;border-radius:2px;margin-top:0;margin-bottom:0;padding:6px 8px}.gantt_common_input:focus,.gantt_common_input:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_common_input:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_one_line_input{height:var(--dhx-gantt-control-height)}.gantt_cal_cover,.gantt_cal_cover *{box-sizing:border-box}.gantt_cal_light{min-width:var(--dhx-gantt-lightbox-width);width:max-content;max-width:var(--dhx-gantt-lightbox-max-width);-webkit-tap-highlight-color:transparent;background-color:var(--dhx-gantt-lightbox-background);height:auto;color:var(--dhx-gantt-lightbox-color);z-index:15;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);border:var(--dhx-gantt-lightbox-border);border-radius:var(--dhx-gantt-popup-border-radius);margin-top:auto;margin-bottom:auto;line-height:142%;position:absolute}.gantt_cal_light.gantt_cal_light_wide{--dhx-gantt-lightbox-width:var(--dhx-gantt-lightbox-wide-max-width);--dhx-gantt-lightbox-max-width:var(--dhx-gantt-lightbox-wide-max-width)}.gantt_cal_light textarea,.gantt_cal_light input,.gantt_cal_light select{background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-size);box-sizing:border-box;border-radius:2px;margin-top:0;margin-bottom:0;padding:6px 8px}.gantt_cal_light textarea:focus,.gantt_cal_light input:focus,.gantt_cal_light select:focus,.gantt_cal_light textarea:focus-visible,.gantt_cal_light input:focus-visible,.gantt_cal_light select:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_cal_light textarea:disabled,.gantt_cal_light input:disabled,.gantt_cal_light select:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_cal_light input,.gantt_cal_light select{height:var(--dhx-gantt-control-height)}.gantt_cal_light input[type=select],.gantt_cal_light input[type=checkbox]{height:var(--dhx-gantt-checkbox-height)}.gantt_cal_light .gantt_time{display:none}.gantt_cal_ltitle{font-size:var(--dhx-gantt-lightbox-title-font-size);font-weight:var(--dhx-gantt-heading-font-weight);background:var(--dhx-gantt-lightbox-title-background);color:var(--dhx-gantt-lightbox-title-color);border-bottom:var(--dhx-gantt-default-border);padding:calc(var(--dhx-gantt-base-padding) * 3) var(--dhx-gantt-lightbox-padding);white-space:nowrap;justify-content:space-between;gap:calc(var(--dhx-gantt-base-padding) * 2);border-top-right-radius:var(--dhx-gantt-popup-border-radius);border-top-left-radius:var(--dhx-gantt-popup-border-radius);flex-direction:row;line-height:142%;display:flex;overflow:hidden}.gantt_cal_ltitle .gantt_mark{display:none}.gantt_cal_ltitle .gantt_cal_ltitle_descr{text-overflow:ellipsis;overflow:hidden}.gantt_cal_ltitle .gantt_cal_ltitle_controls{cursor:pointer;--dhx-gantt-icon-size:18px}.gantt_cal_light_rtl{direction:rtl}.gantt_cal_light_wide.gantt_cal_light_rtl .gantt_custom_button{right:auto;left:calc(var(--dhx-gantt-base-padding) * 2)}.gantt_section_constraint [data-constraint-time-select]{margin-left:20px}.gantt_cal_larea{padding:0 var(--dhx-gantt-lightbox-padding) 4px;gap:calc(var(--dhx-gantt-base-padding) * 2);border:none;height:auto;overflow:hidden}.gantt_cal_cover{z-index:16;background-color:#0000004d;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:fixed;top:0;left:0;overflow:auto}.gantt_lightbox_time_select{min-width:80px}.gantt_lightbox_day_select{min-width:60px}.gantt_lightbox_month_select{min-width:110px}.gantt_lightbox_year_select{min-width:77px}.gantt_cal_light_full{width:auto}.gantt_cal_light_wide .gantt_cal_larea{flex-direction:column;gap:12px;padding-top:12px;display:flex}.gantt_cal_light_wide .gantt_wrap_section{flex:0;display:flex;position:relative}.gantt_cal_light_wide .gantt_cal_lsection{flex-shrink:0;justify-content:flex-start;align-items:flex-start;width:120px;margin-top:0;margin-bottom:0;padding:4px 8px}.gantt_cal_light_wide .gantt_custom_button{left:auto;right:calc(var(--dhx-gantt-base-padding) * 2);position:absolute}.gantt_cal_light_wide .gantt_cal_ltext{flex:1}.gantt_cal_light_wide .gantt_section_time{justify-content:flex-start}.gantt_cal_light_wide .gantt_fullday{margin-left:unset}.gantt_duration{justify-content:flex-start;align-items:center;gap:4px;display:flex}.gantt_duration .gantt_duration_end_date{color:var(--dhx-gantt-base-colors-text-light);min-width:130px}.gantt_duration .gantt_duration_value,.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{background-color:var(--dhx-gantt-lightbox-background);color:var(--dhx-gantt-lightbox-color);border:var(--dhx-gantt-lightbox-control-border);font-size:var(--dhx-gantt-lightbox-font-size);box-sizing:border-box;text-align:center;border-radius:2px;margin-top:0;margin-bottom:0;padding:6px 8px}.gantt_duration .gantt_duration_value:focus,.gantt_duration .gantt_duration_dec:focus,.gantt_duration .gantt_duration_inc:focus,.gantt_duration .gantt_duration_value:focus-visible,.gantt_duration .gantt_duration_dec:focus-visible,.gantt_duration .gantt_duration_inc:focus-visible{border-color:var(--dhx-gantt-base-colors-primary);outline:none}.gantt_duration .gantt_duration_value:disabled,.gantt_duration .gantt_duration_dec:disabled,.gantt_duration .gantt_duration_inc:disabled{background-color:var(--dhx-gantt-base-colors-disabled);color:var(--dhx-gantt-base-colors-icons)}.gantt_duration_inputs{display:flex}.gantt_duration .gantt_duration_value{border-left-width:0;border-right-width:0;border-radius:0;width:40px;padding:3px 4px}.gantt_duration .gantt_duration_value.gantt_duration_value_formatted{width:70px}.gantt_duration .gantt_duration_dec,.gantt_duration .gantt_duration_inc{width:26px;color:var(--dhx-gantt-base-colors-primary);border-radius:var(--dhx-gantt-border-radius);cursor:pointer;padding:1px 4px;font-size:18px}.gantt_duration .gantt_duration_dec{border-top-right-radius:0;border-bottom-right-radius:0}.gantt_duration .gantt_duration_inc{border-top-left-radius:0;border-bottom-left-radius:0;margin-right:4px}.gantt_resources{height:auto;max-height:150px;overflow-y:auto}.gantt_resource_row{border-bottom:1px solid var(--dhx-gantt-base-colors-border-light);cursor:pointer;padding:10px 0;display:block}.gantt_resource_row input[type=checkbox]:not(:checked),.gantt_resource_row input[type=checkbox]:not(:checked)~div{opacity:.5}.gantt_resource_toggle{vertical-align:middle}.gantt_section_resources{flex-direction:column;width:100%;display:flex;overflow:hidden}.gantt_resources_filter{flex-grow:0;align-items:center;display:flex}.gantt_resources_filter label{align-items:center;gap:2px;display:inline-flex}.gantt_resources_filter .gantt_resources_filter_input{box-sizing:border-box;padding:1px 6px}.gantt_resources_filter .switch_unsetted{vertical-align:middle}.gantt_resource_cell{display:inline-block}.gantt_resource_cell.gantt_resource_cell_checkbox{vertical-align:middle;width:24px;min-width:24px;max-width:24px}.gantt_resource_cell.gantt_resource_cell_label{vertical-align:middle;width:40%;max-width:40%}.gantt_resource_cell.gantt_resource_cell_value{vertical-align:middle;width:30%;max-width:30%}.gantt_resource_cell.gantt_resource_cell_value input,.gantt_resource_cell.gantt_resource_cell_value select{vertical-align:middle;box-sizing:border-box;width:80%;padding:1px 2px}.gantt_resource_cell.gantt_resource_cell_unit{vertical-align:middle;width:10%;max-width:10%}.gantt_resource_early_value{opacity:.8;font-size:.9em}.gantt_cal_lcontrols{flex-direction:var(--dhx-gantt-btn-order);gap:calc(var(--dhx-gantt-base-padding)*2);padding:12px var(--dhx-gantt-lightbox-padding);display:flex}.gantt_cal_lcontrols .gantt_btn_set{gap:var(--dhx-gantt-base-padding);flex-direction:row;display:flex}.gantt_cal_lcontrols .gantt_btn_set.gantt_delete_btn_set{--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-background:transparent;--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-error);--dhx-gantt-btn-border-color:transparent;--dhx-gantt-btn-background-hover:transparent;--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-error-hover);--dhx-gantt-btn-border-hover:transparent;--dhx-gantt-btn-background-active:transparent;--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-error-active);--dhx-gantt-btn-border-active:transparent;--dhx-gantt-btn-background-disabled:transparent;--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:transparent;padding:6px 0}.gantt_cal_lcontrols .gantt_btn_set:not(.gantt_save_btn_set,.gantt_delete_btn_set){--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);--dhx-gantt-btn-background:var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color:var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color:var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover:var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover:var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active:var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled:var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled:var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-btn-outline-border-color-disabled)}.gantt_cal_lcontrols .gantt_btn_set .gantt_btn_inner{display:none}.gantt_cal_lcontrols .gantt_btn_set .gantt_delete_btn:before{font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--dhx-gantt-base-colors-icons);font-style:normal;font-size:var(--dhx-gantt-icon-size,1.5em);justify-content:center;align-items:center;display:flex;font-family:dhx-gantt-icons!important;font-weight:400!important}.gantt_cal_lcontrols .gantt_cal_lcontrols_push_right{margin-left:auto}.gantt_cal_ltext textarea{resize:none;width:100%;height:100%;font-family:var(--dhx-gantt-lightbox_font-family);font-size:var(--dhx-gantt-lightbox-font-size);font-weight:var(--dhx-gantt-lightbox-font-weight);line-height:142%}.gantt_section_time_spacer,.gantt_lightbox_minical_spacer{visibility:hidden;flex-basis:100%;height:0}.gantt_section_time{--dhx-gantt-lightbox-time-font-size:var(--dhx-gantt-important-font-size);--dhx-gantt-lightbox-time-font-weight:var(--dhx-gantt-important-font-weight);font-size:var(--dhx-gantt-lightbox-time-font-size);font-weight:var(--dhx-gantt-lightbox-time-font-weight);align-items:center;gap:calc(var(--dhx-gantt-base-padding) * 2);row-gap:var(--dhx-gantt-base-padding);flex-wrap:wrap;line-height:142%;display:flex}.gantt_section_time .gantt_section_time_icon{width:calc(var(--dhx-gantt-base-module) * 2);height:calc(var(--dhx-gantt-base-module) * 2);background:var(--dhx-gantt-base-colors-primary);border-radius:2px}.gantt_section_duration{gap:16px}.gantt_fullday{margin-left:auto}.gantt_cal_light_rtl .gantt_fullday{margin-left:unset;margin-right:auto}.gantt_cal_lsection label{font-weight:var(--dhx-gantt-heading-font-weight);align-items:center;gap:4px;width:100%;display:flex}.gantt_cal_lsection{margin-top:12px;margin-bottom:4px;display:flex}.gantt_cal_lsection .gantt_custom_button{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding,0 20px);box-sizing:border-box;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight,normal);text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);--dhx-gantt-btn-background:var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color:var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color:var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover:var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover:var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active:var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled:var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled:var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-btn-outline-border-color-disabled);margin-left:auto;margin-right:unset;flex-shrink:0;order:1;justify-content:center;align-items:center;gap:4px;line-height:142%;display:flex}.gantt_cal_lsection .gantt_custom_button:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_cal_lsection .gantt_custom_button:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_cal_lsection .gantt_custom_button:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_cal_light_rtl .gantt_custom_button{margin-left:unset;margin-right:auto}.gantt_cal_checkbox{gap:var(--dhx-gantt-base-padding);display:flex}.gantt_cal_wide_checkbox{padding:4px 0}.gantt_cal_radio input{margin:var(--dhx-gantt-base-padding)}.gantt_cal_radio_item{gap:var(--dhx-gantt-base-padding);align-items:center;display:flex}.gantt_cal_radio{gap:4px;display:flex}.gantt_cal_radio_vertical{--dhx-gantt-control-height:20px;flex-direction:column;overflow:auto}.gantt_cal_lcheckbox,.gantt_cal_lradio{flex-wrap:wrap;gap:8px;display:flex}.gantt_cal_lcheckbox label,.gantt_cal_lradio label{align-items:center;gap:4px;display:flex}.gantt_cal_template{padding-top:4px;padding-bottom:4px;position:relative}.gantt_cal_light .gantt_readonly{color:var(--dhx-gantt-base-colors-readonly)}.gantt_resource_selector_filter_wrapper{margin:8px 0}.gantt_resource_selector_filter_wrapper .gantt_resources_filter_input{color:var(--dhx-gantt-base-colors-text-light);box-sizing:border-box;border:1px solid #e2e3e4;border-radius:2px;height:28px;padding:6px 4px 6px 36px}.gantt_resource_selector_filter_wrapper .gantt_custom_button{background:var(--dhx-gantt-btn-background);color:var(--dhx-gantt-btn-color);border:1px solid var(--dhx-gantt-btn-border-color);border-radius:var(--dhx-gantt-border-radius);height:var(--dhx-gantt-control-height);padding:var(--dhx-gantt-btn-padding,0 20px);box-sizing:border-box;font-weight:500;font-size:var(--dhx-gantt-font-size);font-family:var(--dhx-gantt-font-family);font-weight:var(--dhx-gantt-btn-font-weight,normal);text-transform:var(--dhx-gantt-btn-text-transform);cursor:pointer;--dhx-gantt-icon-size:18px;--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);--dhx-gantt-btn-background:var(--dhx-gantt-btn-outline-background);--dhx-gantt-btn-color:var(--dhx-gantt-btn-outline-color);--dhx-gantt-btn-border-color:var(--dhx-gantt-btn-outline-border-color);--dhx-gantt-btn-background-hover:var(--dhx-gantt-btn-outline-background-hover);--dhx-gantt-btn-color-hover:var(--dhx-gantt-btn-outline-color-hover);--dhx-gantt-btn-border-hover:var(--dhx-gantt-btn-outline-border-hover);--dhx-gantt-btn-background-active:var(--dhx-gantt-btn-outline-background-active);--dhx-gantt-btn-color-active:var(--dhx-gantt-btn-outline-color-active);--dhx-gantt-btn-border-active:var(--dhx-gantt-btn-outline-border-active);--dhx-gantt-btn-background-disabled:var(--dhx-gantt-btn-outline-background-disabled);--dhx-gantt-btn-color-disabled:var(--dhx-gantt-btn-outline-color-disabled);--dhx-gantt-btn-border-color-disabled:var(--dhx-gantt-btn-outline-border-color-disabled);margin-left:auto;margin-right:unset;flex-shrink:0;order:1;justify-content:center;align-items:center;gap:4px;line-height:142%;display:flex}.gantt_resource_selector_filter_wrapper .gantt_custom_button:hover{background:var(--dhx-gantt-btn-background-hover);color:var(--dhx-gantt-btn-color-hover);border-color:var(--dhx-gantt-btn-border-hover)}.gantt_resource_selector_filter_wrapper .gantt_custom_button:active{background:var(--dhx-gantt-btn-background-active);color:var(--dhx-gantt-btn-color-active);border-color:var(--dhx-gantt-btn-border-active)}.gantt_resource_selector_filter_wrapper .gantt_custom_button:disabled{background:var(--dhx-gantt-btn-background-disabled);color:var(--dhx-gantt-btn-color-disabled);border-color:var(--dhx-gantt-btn-border-disabled)}.gantt_cal_light_wide .gantt_resource_selector_filter_wrapper{margin-bottom:12px;padding:0}.gantt_custom_button.gantt_add_resources{border:0;padding:0 4px}.gantt_custom_button.gantt_add_resources .gantt_add{opacity:1;width:20px;height:20px}.gantt_resource_selector_grid{color:var(--dhx-gantt-base-colors-text-light)}.gantt_resource_selector_grid .gantt_grid{color:var(--dhx-gantt-base-colors-text-base);border:1px solid #e2e3e4;border-bottom:0;max-height:182px}.gantt_resource_selector_grid .gantt_grid_data{max-height:146px;font-weight:400;overflow-y:auto}.gantt_resource_selector_grid .gantt_grid_scale{background:var(--dhx-gantt-base-colors-background-alt)}.gantt_cal_quick_info{--dhx-gantt-quick-info-font-size:var(--dhx-gantt-font-size);z-index:8;font-size:var(--dhx-gantt-quick-info-font-size);background:var(--dhx-gantt-popup-background);color:var(--dhx-gantt-popup-color);border:var(--dhx-gantt-popup-border);padding:calc(var(--dhx-gantt-base-padding)*2) calc(var(--dhx-gantt-base-padding)*3);border-radius:var(--dhx-gantt-border-radius);width:300px;box-shadow:var(--dhx-gantt-box-shadow-s);flex-direction:column;transition:left .5s,right .5s;display:flex;position:absolute}.gantt_cal_qi_tcontrols{justify-content:flex-end;height:8px;display:flex}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn{--dhx-gantt-icon-size:18px;--dhx-gantt-btn-background:transparent;--dhx-gantt-btn-color:var(--dhx-gantt-base-colors-primary);--dhx-gantt-btn-border-color:transparent;--dhx-gantt-btn-background-hover:transparent;--dhx-gantt-btn-color-hover:var(--dhx-gantt-base-colors-primary-hover);--dhx-gantt-btn-border-hover:transparent;--dhx-gantt-btn-background-active:transparent;--dhx-gantt-btn-color-active:var(--dhx-gantt-base-colors-primary-active);--dhx-gantt-btn-border-active:transparent;--dhx-gantt-btn-background-disabled:transparent;--dhx-gantt-btn-color-disabled:var(--dhx-gantt-base-colors-icons);--dhx-gantt-btn-border-color-disabled:transparent;min-width:32px;height:32px;width:unset;min-width:unset;cursor:pointer;z-index:1;border-radius:50%;height:20px;padding:2px;font-size:18px;position:relative}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:hover{--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-icons-hover)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:active{--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-icons-active)}.gantt_cal_qi_tcontrols .gantt_cal_qi_close_btn:disabled{--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color-disabled)}.gantt_cal_qi_title,.gantt_cal_qi_controls,.gantt_cal_qi_content{padding:0 calc(var(--dhx-gantt-base-padding) * 3)}.gantt_cal_qi_title{flex-direction:column;gap:12px;padding-right:14px;display:flex}.gantt_cal_qi_tcontent{font-size:var(--dhx-gantt-heading-font-size);font-weight:var(--dhx-gantt-heading-font-weight);text-overflow:ellipsis;white-space:nowrap;flex-direction:row;flex-grow:0;justify-content:flex-start;align-items:center;gap:8px;line-height:150%;display:flex;position:relative;overflow:hidden}.gantt_cal_qi_tcontent>span{text-overflow:ellipsis;overflow:hidden}.gantt_cal_qi_tcontent:before{display:var(--dhx-gantt-quick-info-dot-display,block);content:"";background:var(--dhx-gantt-task-background);border-radius:2px;flex-shrink:0;width:8px;height:8px}.gantt_cal_qi_tdate{font-size:var(--dhx-gantt-important-font-size);font-weight:var(--dhx-gantt-important-font-weight);line-height:var(--dhx-gantt-important-line-height)}.gantt_cal_qi_content{white-space:normal;padding-top:16px;padding-bottom:8px}.gantt_cal_qi_controls{color:var(--dhx-gantt-base-colors-primary);flex-direction:row;justify-content:flex-start;align-items:center;gap:12px;padding-top:8px;display:flex}.gantt_cal_qi_controls>div:first-child{margin-left:-3px}.gantt_menu_icon{--dhx-gantt-base-colors-icons:var(--dhx-gantt-btn-color);justify-content:center;align-items:center;width:20px;height:20px;display:flex}.gantt_cal_quick_info.gantt_qi_hidden{display:none}.gantt_tooltip{z-index:50;white-space:nowrap;box-shadow:var(--dhx-gantt-box-shadow-m);background:var(--dhx-gantt-tooltip-background);color:var(--dhx-gantt-tooltip-color);border:var(--dhx-gantt-tooltip-border);font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-regular-font-size);line-height:var(--dhx-gantt-regular-line-height);font-weight:var(--dhx-gantt-regular-font-weight);border-radius:var(--dhx-gantt-tooltip-border-radius);flex-direction:column;align-items:flex-start;gap:4px;padding:8px 30px 8px 8px;display:flex;position:absolute}.gantt_resource_marker{text-align:center;font-size:var(--dhx-gantt-font-size);color:#fff;position:absolute}.gantt_resource_marker_ok{background:var(--dhx-gantt-base-colors-success)}.gantt_resource_marker_overtime{background:var(--dhx-gantt-base-colors-error)}.gantt_histogram_label{z-index:1;width:100%;height:100%;font-weight:700;font-size:var(--dhx-gantt-font-size);position:absolute}.gantt_histogram_fill{background-color:#537cfa4d;background-color:color-mix(in srgb,var(--dhx-gantt-base-colors-primary),transparent 60%);width:100%;position:absolute;bottom:0}.gantt_histogram_hor_bar{background:var(--dhx-gantt-base-colors-primary);height:1px;margin-top:-1px;margin-left:-1px;position:absolute}.gantt_histogram_vert_bar{background:var(--dhx-gantt-base-colors-primary);width:1px;margin-left:-1px;position:absolute}.gantt_histogram_cell{text-align:center;font-size:var(--dhx-gantt-font-size);position:absolute}.gantt_marker{text-align:center;background-color:var(--dhx-gantt-base-colors-error);width:1px;height:100%;position:absolute;top:0}.gantt_marker .gantt_marker_content{background:inherit;color:var(--dhx-gantt-base-colors-white);font-size:var(--dhx-gantt-caption-font-size);line-height:var(--dhx-gantt-caption-line-height);font-weight:var(--dhx-gantt-caption-line-weight);padding:2px;position:absolute}.gantt_marker_area{position:absolute;top:0;left:0}.gantt_grid_editor_placeholder{position:absolute}.gantt_grid_editor_placeholder>div,.gantt_grid_editor_placeholder input,.gantt_grid_editor_placeholder select{box-sizing:border-box;width:100%;height:100%}.gantt_row_placeholder div{opacity:.5}.gantt_row_placeholder .gantt_file,.gantt_row_placeholder .gantt_add{display:none}.gantt_drag_marker.gantt_grid_dnd_marker{background-color:#0000;transition:all .1s}.gantt_grid_dnd_marker_line{background-color:var(--dhx-gantt-base-colors-primary);width:100%;height:4px}.gantt_grid_dnd_marker_line:before{background:var(--dhx-gantt-base-colors-white);box-sizing:border-box;border:3px solid var(--dhx-gantt-base-colors-primary);content:"";pointer-events:none;border-radius:6px;width:12px;height:12px;margin-top:-4px;margin-left:-11px;line-height:1px;display:block;position:absolute}.gantt_grid_dnd_marker_folder{pointer-events:none;box-sizing:border-box;width:100%;height:100%;box-shadow:0 0 0 2px var(--dhx-gantt-base-colors-primary) inset;background:0 0;position:absolute}.gantt_overlay_area{height:inherit;width:inherit;display:none;position:absolute;top:0;left:0}.gantt_overlay{height:inherit;width:inherit;position:absolute;top:0;left:0}.gantt_click_drag_rect{outline:1px solid var(--dhx-gantt-base-colors-primary);background-color:var(--dhx-gantt-base-colors-primary-lighter);position:absolute;top:0;left:0}.gantt_timeline_move_available,.gantt_timeline_move_available *{cursor:move}.gantt_constraint_marker{pointer-events:none;--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-text-light);position:absolute}.gantt_constraint_marker.gantt_constraint_marker_snlt,.gantt_constraint_marker.gantt_constraint_marker_fnlt,.gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(180deg)}.gantt_constraint_marker svg{max-width:100%;max-height:100%;display:block}.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snlt,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnlt,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mfo{transform:rotate(0)}.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_snet,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_fnet,.gantt_rtl .gantt_constraint_marker.gantt_constraint_marker_mso{transform:rotate(180deg)}.gantt_rtl .gantt_grid{text-align:right}.gantt_rtl .gantt_row,.gantt_rtl .gantt_cell{flex-direction:row-reverse}.gantt_layout_content{box-sizing:border-box;width:100%;overflow:auto}.gantt_layout_cell{box-sizing:border-box;position:relative}.gantt_layout_cell>.gantt_layout_header{color:#fff;box-sizing:border-box;background:#33aae8;padding:5px 10px;font-size:17px}.gantt_layout_header.collapsed_x{background:#a9a9a9}.gantt_layout_header.collapsed_x .gantt_header_arrow:before{content:"⇧"}.gantt_layout_header.collapsed_y{background:#a9a9a9}.gantt_layout_header.collapsed_y .gantt_header_arrow:before{content:"⇩"}.gantt_layout_header{cursor:pointer}.gantt_layout_header .gantt_header_arrow{float:right;text-align:right}.gantt_layout_header .gantt_header_arrow:before{content:"⇦"}.gantt_layout_header.vertical .gantt_header_arrow:before{content:"⇧"}.gantt_layout_outer_scroll_vertical .gantt_layout_content{overflow-y:hidden}.gantt_layout_outer_scroll_horizontal .gantt_layout_content{overflow-x:hidden}.gantt_layout_x>.gantt_layout_cell{vertical-align:top;display:inline-block}.gantt_layout_x{white-space:nowrap}.gantt_resizing{opacity:.7;background:#f2f2f2}.gantt_layout_cell_border_right.gantt_resizer{border-right:0;overflow:visible}.gantt_resizer{cursor:e-resize;position:relative}.gantt_resizer_y{cursor:n-resize}.gantt_resizer_stick{z-index:9999;background:#33aae8;width:100%;position:absolute;top:0}.gantt_resizer_x .gantt_resizer_x{z-index:1;width:12px;height:100%;margin-left:-2px;position:absolute;top:0;left:0}.gantt_resizer_y .gantt_resizer_y{z-index:1;width:100%;height:12px;position:absolute;top:-2px;left:0}.gantt_resizer_error{background:#cd5c5c!important}.gantt_layout_cell_border_left{border-left:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_right{border-right:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_top{border-top:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_bottom{border-bottom:var(--dhx-gantt-default-border)}.gantt_layout_cell_border_transparent{border-color:#0000}.gantt_window{z-index:999999999;background:#fff;position:absolute;top:50%;left:50%}.gantt_window_content{position:relative}.gantt_window_content_header{color:#fff;background:#39c;border-bottom:2px solid #fff;height:33px;padding:10px 10px 0;position:relative}.gantt_window_content_header_text{padding-left:10%}.gantt_window_content_header_buttons{position:absolute;top:10px;right:10px}.gantt_window_content_header_buttons:hover{color:#000;cursor:pointer}.gantt_window_content_resizer{text-align:center;cursor:nw-resize;z-index:999;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPCAMAAAAMCGV4AAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeAFjIAUwUshlpJDLSIhLGAAACQ4AFk79JaMAAAAASUVORK5CYII=);width:15px;height:15px;line-height:15px;position:absolute;bottom:0;right:-1px}.gantt_window_content_frame{z-index:9999;background:#0000001a;width:100%;height:100%;position:absolute;top:0;left:0}.gantt_window_drag{cursor:pointer!important}.gantt_window_resizing{overflow:visible}.gantt_window_resizing_body{overflow:hidden!important}.gantt_window_modal{z-index:9999;background:#0000001a;width:100%;height:100%;position:fixed;top:0;left:0}.gantt_container,.gantt_cal_light,.gantt_message_area,.gantt_modal_box,.gantt_cal_quick_info,.gantt_tooltip{text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--dhx-gantt-font-family)}.gantt_container,.gantt_container *{box-sizing:border-box}.gantt_noselect{-webkit-user-select:none;user-select:none}.gantt_noselect .gantt_grid_data .gantt_row:hover,.gantt_noselect .gantt_grid_data .gantt_row.odd:hover{background-color:unset}.gantt_drag_marker{font-family:var(--dhx-gantt-font-family);font-size:var(--dhx-gantt-font-size);z-index:1;white-space:nowrap;background:var(--dhx-gantt-base-colors-select);position:absolute;top:-1000px;left:-1000px}.gantt_drag_marker .gantt_tree_indent,.gantt_drag_marker .gantt_tree_icon.gantt_blank,.gantt_drag_marker .gantt_tree_icon.gantt_open,.gantt_drag_marker .gantt_tree_icon.gantt_close{display:none}.gantt_empty_state_wrapper{position:relative}.gantt_empty_state{box-sizing:border-box;white-space:pre-line;overflow-wrap:break-word;flex-direction:column;justify-content:flex-start;max-width:500px;height:100%;margin:0 auto;display:flex}.gantt_empty_state_text{text-align:center}.gantt_empty_state_text_link{color:var(--dhx-gantt-base-colors-primary);opacity:1;height:unset;cursor:pointer;background:0 0}.gantt_drag_marker .gantt_row.odd{background-color:var(--dhx-gantt-base-colors-select)}.gantt_drag_marker .gantt_row{border-left:var(--dhx-gantt-scale-border-vertical);border-top:var(--dhx-gantt-scale-border-horizontal)}.gantt_drag_marker .gantt_cell{border-color:var(--dhx-gantt-base-colors-border)}.gantt_row.gantt_over,.gantt_task_row.gantt_over{background-color:var(--dhx-gantt-base-colors-primary-active)}.gantt_row.gantt_transparent .gantt_cell{opacity:.7}.gantt_task_row.gantt_transparent{background-color:#537cfa73}.gantt_container_resize_watcher{z-index:-1;pointer-events:none;box-sizing:border-box;opacity:0;background:0 0;border:0;width:100%;height:100%;position:absolute;top:0;left:0}.gantt_task_deadline{z-index:5;--dhx-gantt-base-colors-icons:var(--dhx-gantt-base-colors-error);pointer-events:none;position:absolute}.gantt_task_deadline:before{font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color:var(--dhx-gantt-base-colors-icons);font-style:normal;font-size:var(--dhx-gantt-icon-size,1.5em);justify-content:center;align-items:center;display:flex;font-family:dhx-gantt-icons!important;font-weight:400!important}.gantt_task_baseline{opacity:.9;z-index:0;background:#ffd180;border-radius:2px;position:absolute;overflow:hidden}.gantt_task_baseline.gantt_milestone_baseline{transform:rotate(45deg)}.gantt_task_baseline.gantt_task_baseline_0{background:var(--dhx-gantt-baseline-background-0)}.gantt_task_baseline.gantt_task_baseline_1{background:var(--dhx-gantt-baseline-background-1)}.gantt_task_baseline.gantt_task_baseline_2{background:var(--dhx-gantt-baseline-background-2)}.gantt_task_baseline.gantt_task_baseline_3{background:var(--dhx-gantt-baseline-background-3)}.gantt_task_baseline.gantt_task_baseline_4{background:var(--dhx-gantt-baseline-background-4)}.gantt_task_baseline.gantt_task_baseline_5{background:var(--dhx-gantt-baseline-background-5)}.gantt_task_baseline.gantt_task_baseline_6{background:var(--dhx-gantt-baseline-background-6)}.gantt_task_baseline.gantt_task_baseline_7{background:var(--dhx-gantt-baseline-background-7)}.gantt_task_baseline.gantt_task_baseline_8{background:var(--dhx-gantt-baseline-background-8)}.gantt_task_baseline.gantt_task_baseline_9{background:var(--dhx-gantt-baseline-background-9)}.gantt_section_baselines{flex-direction:column;gap:4px;padding-top:4px;padding-bottom:4px;display:flex;overflow-y:auto}.gantt_custom_button.gantt_add_baselines{margin-left:0}.resources_section_placeholder{color:var(--dhx-gantt-base-colors-text-light);margin-top:8px;font-weight:400}.gantt_resource_lightbox_row,.gantt_resource_lightbox_header{align-items:center;display:flex}.gantt_resource_lightbox_header{background:#f2f2f2}.gantt_resource_lightbox_head_cell{justify-content:center;padding:8px;display:flex}.gantt_resources_filter label{position:relative}.baseline_delete_button{cursor:pointer;padding:6px}
|