@hotmeshio/long-tail 0.11.0 → 0.11.1

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.
Files changed (230) hide show
  1. package/build/routes/mcp-endpoint.js +4 -1
  2. package/build/services/escalation/aggregate-validate.js +6 -0
  3. package/build/services/escalation/facet-sql.js +10 -0
  4. package/build/services/mcp/external-server.js +34 -26
  5. package/build/system/index.js +17 -0
  6. package/build/system/mcp-servers/admin/index.js +2 -4
  7. package/build/system/seed/tool-manifests-admin.d.ts +0 -1137
  8. package/build/system/seed/tool-manifests-admin.js +0 -5
  9. package/build/tsconfig.tsbuildinfo +1 -1
  10. package/build/types/facets.d.ts +8 -0
  11. package/dashboard/dist/assets/{AdminDashboard-DJ3LJQ09.js → AdminDashboard-D4ebrcNR.js} +2 -2
  12. package/dashboard/dist/assets/{AdminDashboard-DJ3LJQ09.js.map → AdminDashboard-D4ebrcNR.js.map} +1 -1
  13. package/dashboard/dist/assets/{AgentConfigPage-BMMvaD0z.js → AgentConfigPage-DP4KUuCX.js} +2 -2
  14. package/dashboard/dist/assets/{AgentConfigPage-BMMvaD0z.js.map → AgentConfigPage-DP4KUuCX.js.map} +1 -1
  15. package/dashboard/dist/assets/{AgentDetailPage-C6wfsnRe.js → AgentDetailPage-ktYiR1kq.js} +2 -2
  16. package/dashboard/dist/assets/{AgentDetailPage-C6wfsnRe.js.map → AgentDetailPage-ktYiR1kq.js.map} +1 -1
  17. package/dashboard/dist/assets/{AgentsPage-Cwqka7nE.js → AgentsPage-B4iqm4-h.js} +2 -2
  18. package/dashboard/dist/assets/{AgentsPage-Cwqka7nE.js.map → AgentsPage-B4iqm4-h.js.map} +1 -1
  19. package/dashboard/dist/assets/AvailableEscalationsPage-tL3mM1RG.js +2 -0
  20. package/dashboard/dist/assets/AvailableEscalationsPage-tL3mM1RG.js.map +1 -0
  21. package/dashboard/dist/assets/{BotPicker-BBkJBXZB.js → BotPicker-CLrJuHnW.js} +2 -2
  22. package/dashboard/dist/assets/{BotPicker-BBkJBXZB.js.map → BotPicker-CLrJuHnW.js.map} +1 -1
  23. package/dashboard/dist/assets/CapabilitiesPage-DG5V0tMT.js +2 -0
  24. package/dashboard/dist/assets/CapabilitiesPage-DG5V0tMT.js.map +1 -0
  25. package/dashboard/dist/assets/{CollapsibleSection-B3FsrHwH.js → CollapsibleSection-CvLHvVfU.js} +2 -2
  26. package/dashboard/dist/assets/{CollapsibleSection-B3FsrHwH.js.map → CollapsibleSection-CvLHvVfU.js.map} +1 -1
  27. package/dashboard/dist/assets/{CountdownTimer-B3nCqJdC.js → CountdownTimer-Co57-iLY.js} +2 -2
  28. package/dashboard/dist/assets/{CountdownTimer-B3nCqJdC.js.map → CountdownTimer-Co57-iLY.js.map} +1 -1
  29. package/dashboard/dist/assets/{CredentialsPage-Bv875IHe.js → CredentialsPage-qCJZ3rdi.js} +2 -2
  30. package/dashboard/dist/assets/{CredentialsPage-Bv875IHe.js.map → CredentialsPage-qCJZ3rdi.js.map} +1 -1
  31. package/dashboard/dist/assets/{CronLabel-CSzjWuwj.js → CronLabel-C3iKifDN.js} +2 -2
  32. package/dashboard/dist/assets/{CronLabel-CSzjWuwj.js.map → CronLabel-C3iKifDN.js.map} +1 -1
  33. package/dashboard/dist/assets/{CustomDurationPicker-CCpqf3e4.js → CustomDurationPicker-C-Szl4rU.js} +2 -2
  34. package/dashboard/dist/assets/{CustomDurationPicker-CCpqf3e4.js.map → CustomDurationPicker-C-Szl4rU.js.map} +1 -1
  35. package/dashboard/dist/assets/{DropZone-CJkk-U3o.js → DropZone-BWD9aGOz.js} +2 -2
  36. package/dashboard/dist/assets/{DropZone-CJkk-U3o.js.map → DropZone-BWD9aGOz.js.map} +1 -1
  37. package/dashboard/dist/assets/{ElapsedCell-WV6pUaKo.js → ElapsedCell-CamZk5o1.js} +2 -2
  38. package/dashboard/dist/assets/{ElapsedCell-WV6pUaKo.js.map → ElapsedCell-CamZk5o1.js.map} +1 -1
  39. package/dashboard/dist/assets/EntityTimelinePanel-CABCW2dS.js +2 -0
  40. package/dashboard/dist/assets/EntityTimelinePanel-CABCW2dS.js.map +1 -0
  41. package/dashboard/dist/assets/{EscalationListSchemaPage-CTQCALw4.js → EscalationListSchemaPage-BddDSfjl.js} +2 -2
  42. package/dashboard/dist/assets/{EscalationListSchemaPage-CTQCALw4.js.map → EscalationListSchemaPage-BddDSfjl.js.map} +1 -1
  43. package/dashboard/dist/assets/{EscalationSchemaPage-D_UgP0pv.js → EscalationSchemaPage-BRyCtw9R.js} +2 -2
  44. package/dashboard/dist/assets/{EscalationSchemaPage-D_UgP0pv.js.map → EscalationSchemaPage-BRyCtw9R.js.map} +1 -1
  45. package/dashboard/dist/assets/{EscalationsOverview-DuIUyxr0.js → EscalationsOverview-DUWYxJyD.js} +2 -2
  46. package/dashboard/dist/assets/{EscalationsOverview-DuIUyxr0.js.map → EscalationsOverview-DUWYxJyD.js.map} +1 -1
  47. package/dashboard/dist/assets/{EventTable-BV6unphX.js → EventTable-CtVuCgq6.js} +2 -2
  48. package/dashboard/dist/assets/{EventTable-BV6unphX.js.map → EventTable-CtVuCgq6.js.map} +1 -1
  49. package/dashboard/dist/assets/{FilterBar-DYFgzXNB.js → FilterBar-BYsBgOiE.js} +2 -2
  50. package/dashboard/dist/assets/{FilterBar-DYFgzXNB.js.map → FilterBar-BYsBgOiE.js.map} +1 -1
  51. package/dashboard/dist/assets/{GraphInvokePage-BGHVUipJ.js → GraphInvokePage-CA4skPN2.js} +2 -2
  52. package/dashboard/dist/assets/{GraphInvokePage-BGHVUipJ.js.map → GraphInvokePage-CA4skPN2.js.map} +1 -1
  53. package/dashboard/dist/assets/{HomePage-B-S2cK3E.js → HomePage-DwG-AnjQ.js} +2 -2
  54. package/dashboard/dist/assets/{HomePage-B-S2cK3E.js.map → HomePage-DwG-AnjQ.js.map} +1 -1
  55. package/dashboard/dist/assets/{ListToolbar-Bl7F3A28.js → ListToolbar-D86IN_hQ.js} +2 -2
  56. package/dashboard/dist/assets/{ListToolbar-Bl7F3A28.js.map → ListToolbar-D86IN_hQ.js.map} +1 -1
  57. package/dashboard/dist/assets/{McpOverview-_T9IsCD_.js → McpOverview-CoEHGseD.js} +2 -2
  58. package/dashboard/dist/assets/{McpOverview-_T9IsCD_.js.map → McpOverview-CoEHGseD.js.map} +1 -1
  59. package/dashboard/dist/assets/{McpQueryDetailPage-DtsVqKPw.js → McpQueryDetailPage-C9hMgJe1.js} +2 -2
  60. package/dashboard/dist/assets/{McpQueryDetailPage-DtsVqKPw.js.map → McpQueryDetailPage-C9hMgJe1.js.map} +1 -1
  61. package/dashboard/dist/assets/{McpQueryPage-DX5u-1bx.js → McpQueryPage-B20Zn4QX.js} +2 -2
  62. package/dashboard/dist/assets/{McpQueryPage-DX5u-1bx.js.map → McpQueryPage-B20Zn4QX.js.map} +1 -1
  63. package/dashboard/dist/assets/{McpRunDetailPage-BhcqqtYS.js → McpRunDetailPage-DDKHf-3R.js} +2 -2
  64. package/dashboard/dist/assets/{McpRunDetailPage-BhcqqtYS.js.map → McpRunDetailPage-DDKHf-3R.js.map} +1 -1
  65. package/dashboard/dist/assets/{McpRunsPage-L-1y8wnX.js → McpRunsPage-Puyn3iJr.js} +2 -2
  66. package/dashboard/dist/assets/{McpRunsPage-L-1y8wnX.js.map → McpRunsPage-Puyn3iJr.js.map} +1 -1
  67. package/dashboard/dist/assets/{NamespacePill-in1SLd0W.js → NamespacePill-C09QuOEz.js} +2 -2
  68. package/dashboard/dist/assets/{NamespacePill-in1SLd0W.js.map → NamespacePill-C09QuOEz.js.map} +1 -1
  69. package/dashboard/dist/assets/OperationsPage-Bsrt4XTL.js +3 -0
  70. package/dashboard/dist/assets/OperationsPage-Bsrt4XTL.js.map +1 -0
  71. package/dashboard/dist/assets/{OperatorDashboard-CIbDzOlh.js → OperatorDashboard-CXBbFLAL.js} +2 -2
  72. package/dashboard/dist/assets/{OperatorDashboard-CIbDzOlh.js.map → OperatorDashboard-CXBbFLAL.js.map} +1 -1
  73. package/dashboard/dist/assets/{PageHeader-BJgWMZtw.js → PageHeader-B7YJxa4o.js} +2 -2
  74. package/dashboard/dist/assets/{PageHeader-BJgWMZtw.js.map → PageHeader-B7YJxa4o.js.map} +1 -1
  75. package/dashboard/dist/assets/{PageHeaderWithStats-Ccio4vyG.js → PageHeaderWithStats-gT-5ovJh.js} +2 -2
  76. package/dashboard/dist/assets/{PageHeaderWithStats-Ccio4vyG.js.map → PageHeaderWithStats-gT-5ovJh.js.map} +1 -1
  77. package/dashboard/dist/assets/{PersonaDetailPage-BOaf0TW1.js → PersonaDetailPage-BN5xNDDX.js} +2 -2
  78. package/dashboard/dist/assets/{PersonaDetailPage-BOaf0TW1.js.map → PersonaDetailPage-BN5xNDDX.js.map} +1 -1
  79. package/dashboard/dist/assets/PersonasPage-Bdtv6HPZ.js +2 -0
  80. package/dashboard/dist/assets/PersonasPage-Bdtv6HPZ.js.map +1 -0
  81. package/dashboard/dist/assets/{ProcessDetailPage-DN9NqfeP.js → ProcessDetailPage-BMg70ZAJ.js} +2 -2
  82. package/dashboard/dist/assets/{ProcessDetailPage-DN9NqfeP.js.map → ProcessDetailPage-BMg70ZAJ.js.map} +1 -1
  83. package/dashboard/dist/assets/{ProcessesListPage-CfQEWaD4.js → ProcessesListPage-_KvdxGhL.js} +2 -2
  84. package/dashboard/dist/assets/{ProcessesListPage-CfQEWaD4.js.map → ProcessesListPage-_KvdxGhL.js.map} +1 -1
  85. package/dashboard/dist/assets/{RoleDetailPage-BC5HL7ls.js → RoleDetailPage-BM5BXc7j.js} +2 -2
  86. package/dashboard/dist/assets/{RoleDetailPage-BC5HL7ls.js.map → RoleDetailPage-BM5BXc7j.js.map} +1 -1
  87. package/dashboard/dist/assets/{RolePill-BNAP-uK6.js → RolePill-CtYI1_k1.js} +2 -2
  88. package/dashboard/dist/assets/{RolePill-BNAP-uK6.js.map → RolePill-CtYI1_k1.js.map} +1 -1
  89. package/dashboard/dist/assets/RolesPage-Bv23VmUi.js +2 -0
  90. package/dashboard/dist/assets/RolesPage-Bv23VmUi.js.map +1 -0
  91. package/dashboard/dist/assets/{RunAsSelector-twbuX7fB.js → RunAsSelector-D-Sjr7uB.js} +2 -2
  92. package/dashboard/dist/assets/{RunAsSelector-twbuX7fB.js.map → RunAsSelector-D-Sjr7uB.js.map} +1 -1
  93. package/dashboard/dist/assets/{ScanCodesPage-CPNg6K--.js → ScanCodesPage-s3OEMJno.js} +2 -2
  94. package/dashboard/dist/assets/{ScanCodesPage-CPNg6K--.js.map → ScanCodesPage-s3OEMJno.js.map} +1 -1
  95. package/dashboard/dist/assets/ScanSchemeDetailPage-D8WQkZmw.js +2 -0
  96. package/dashboard/dist/assets/ScanSchemeDetailPage-D8WQkZmw.js.map +1 -0
  97. package/dashboard/dist/assets/ScanStationPage-CkRQaH5G.js +2 -0
  98. package/dashboard/dist/assets/ScanStationPage-CkRQaH5G.js.map +1 -0
  99. package/dashboard/dist/assets/{ScopeBadge-BG7KkZ8Q.js → ScopeBadge-B76rOtA0.js} +2 -2
  100. package/dashboard/dist/assets/{ScopeBadge-BG7KkZ8Q.js.map → ScopeBadge-B76rOtA0.js.map} +1 -1
  101. package/dashboard/dist/assets/{StickyPagination-DIeYMPPd.js → StickyPagination-BpTIMOL5.js} +2 -2
  102. package/dashboard/dist/assets/{StickyPagination-DIeYMPPd.js.map → StickyPagination-BpTIMOL5.js.map} +1 -1
  103. package/dashboard/dist/assets/{StreamMessageDetail-gU4CUeQI.js → StreamMessageDetail-ChoWrZzO.js} +2 -2
  104. package/dashboard/dist/assets/{StreamMessageDetail-gU4CUeQI.js.map → StreamMessageDetail-ChoWrZzO.js.map} +1 -1
  105. package/dashboard/dist/assets/{SwimlaneTimeline-Br-nBA4l.js → SwimlaneTimeline-nmIqEuEH.js} +2 -2
  106. package/dashboard/dist/assets/{SwimlaneTimeline-Br-nBA4l.js.map → SwimlaneTimeline-nmIqEuEH.js.map} +1 -1
  107. package/dashboard/dist/assets/{TagInput-CvM5n6ww.js → TagInput-BQAPOp17.js} +2 -2
  108. package/dashboard/dist/assets/{TagInput-CvM5n6ww.js.map → TagInput-BQAPOp17.js.map} +1 -1
  109. package/dashboard/dist/assets/{TaskDetailPage-_9cr_R0u.js → TaskDetailPage-KajZD2Cp.js} +2 -2
  110. package/dashboard/dist/assets/{TaskDetailPage-_9cr_R0u.js.map → TaskDetailPage-KajZD2Cp.js.map} +1 -1
  111. package/dashboard/dist/assets/{TaskQueuePill-D4JPHXOq.js → TaskQueuePill-C2NImrwl.js} +2 -2
  112. package/dashboard/dist/assets/{TaskQueuePill-D4JPHXOq.js.map → TaskQueuePill-C2NImrwl.js.map} +1 -1
  113. package/dashboard/dist/assets/{TasksListPage-DVENC9Jp.js → TasksListPage-CiqSfapP.js} +2 -2
  114. package/dashboard/dist/assets/{TasksListPage-DVENC9Jp.js.map → TasksListPage-CiqSfapP.js.map} +1 -1
  115. package/dashboard/dist/assets/{TimeAgo-C9yYnOui.js → TimeAgo-ClauexJj.js} +2 -2
  116. package/dashboard/dist/assets/{TimeAgo-C9yYnOui.js.map → TimeAgo-ClauexJj.js.map} +1 -1
  117. package/dashboard/dist/assets/{TimestampCell-DoB8cYgw.js → TimestampCell-CXmbCnAJ.js} +2 -2
  118. package/dashboard/dist/assets/{TimestampCell-DoB8cYgw.js.map → TimestampCell-CXmbCnAJ.js.map} +1 -1
  119. package/dashboard/dist/assets/{ToolPill-BUjbC-Tj.js → ToolPill-FOZm67TS.js} +2 -2
  120. package/dashboard/dist/assets/{ToolPill-BUjbC-Tj.js.map → ToolPill-FOZm67TS.js.map} +1 -1
  121. package/dashboard/dist/assets/{ToolTestPanel-CBtsIP8K.js → ToolTestPanel-DFUU0zGv.js} +2 -2
  122. package/dashboard/dist/assets/{ToolTestPanel-CBtsIP8K.js.map → ToolTestPanel-DFUU0zGv.js.map} +1 -1
  123. package/dashboard/dist/assets/{TopicDetailPage-mR4Jaz83.js → TopicDetailPage-DuN5BrsI.js} +2 -2
  124. package/dashboard/dist/assets/{TopicDetailPage-mR4Jaz83.js.map → TopicDetailPage-DuN5BrsI.js.map} +1 -1
  125. package/dashboard/dist/assets/{TopicsPage-CP7HFxIC.js → TopicsPage-DZ1NQdYG.js} +2 -2
  126. package/dashboard/dist/assets/{TopicsPage-CP7HFxIC.js.map → TopicsPage-DZ1NQdYG.js.map} +1 -1
  127. package/dashboard/dist/assets/{UserName-BnLF6yhz.js → UserName-BPHG_MQs.js} +2 -2
  128. package/dashboard/dist/assets/{UserName-BnLF6yhz.js.map → UserName-BPHG_MQs.js.map} +1 -1
  129. package/dashboard/dist/assets/{WorkflowExecutionPage-xL956RZi.js → WorkflowExecutionPage-D_Z-tIjR.js} +2 -2
  130. package/dashboard/dist/assets/{WorkflowExecutionPage-xL956RZi.js.map → WorkflowExecutionPage-D_Z-tIjR.js.map} +1 -1
  131. package/dashboard/dist/assets/{WorkflowPill-tXU0-eXu.js → WorkflowPill-C5TEWlfO.js} +2 -2
  132. package/dashboard/dist/assets/{WorkflowPill-tXU0-eXu.js.map → WorkflowPill-C5TEWlfO.js.map} +1 -1
  133. package/dashboard/dist/assets/{WorkflowsDashboard-B-u7zFKM.js → WorkflowsDashboard-VMBW1WuR.js} +2 -2
  134. package/dashboard/dist/assets/{WorkflowsDashboard-B-u7zFKM.js.map → WorkflowsDashboard-VMBW1WuR.js.map} +1 -1
  135. package/dashboard/dist/assets/{WorkflowsOverview-CqZVarK-.js → WorkflowsOverview-CUOXXcpg.js} +2 -2
  136. package/dashboard/dist/assets/{WorkflowsOverview-CqZVarK-.js.map → WorkflowsOverview-CUOXXcpg.js.map} +1 -1
  137. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DiFLavW0.js → YamlWorkflowDetailPage-CsfzbboC.js} +2 -2
  138. package/dashboard/dist/assets/{YamlWorkflowDetailPage-DiFLavW0.js.map → YamlWorkflowDetailPage-CsfzbboC.js.map} +1 -1
  139. package/dashboard/dist/assets/{YamlWorkflowsPage-BuQM6uZA.js → YamlWorkflowsPage-BpgKLSGT.js} +2 -2
  140. package/dashboard/dist/assets/{YamlWorkflowsPage-BuQM6uZA.js.map → YamlWorkflowsPage-BpgKLSGT.js.map} +1 -1
  141. package/dashboard/dist/assets/{agents-DU9GPovp.js → agents-Cg2FVYQP.js} +2 -2
  142. package/dashboard/dist/assets/{agents-DU9GPovp.js.map → agents-Cg2FVYQP.js.map} +1 -1
  143. package/dashboard/dist/assets/{bots-Cy-Hmg7w.js → bots-vtVLRKGt.js} +2 -2
  144. package/dashboard/dist/assets/{bots-Cy-Hmg7w.js.map → bots-vtVLRKGt.js.map} +1 -1
  145. package/dashboard/dist/assets/{capabilities-sSJJqrp-.js → capabilities-DLsXhwlD.js} +2 -2
  146. package/dashboard/dist/assets/{capabilities-sSJJqrp-.js.map → capabilities-DLsXhwlD.js.map} +1 -1
  147. package/dashboard/dist/assets/{controlplane-TVCjDHQ-.js → controlplane-Js7dxpX4.js} +2 -2
  148. package/dashboard/dist/assets/{controlplane-TVCjDHQ-.js.map → controlplane-Js7dxpX4.js.map} +1 -1
  149. package/dashboard/dist/assets/{escalation-columns-BpkjKYGd.js → escalation-columns-h0NLAJss.js} +2 -2
  150. package/dashboard/dist/assets/{escalation-columns-BpkjKYGd.js.map → escalation-columns-h0NLAJss.js.map} +1 -1
  151. package/dashboard/dist/assets/{index-DOai950R.js → index-7c7FEe5S.js} +2 -2
  152. package/dashboard/dist/assets/{index-DOai950R.js.map → index-7c7FEe5S.js.map} +1 -1
  153. package/dashboard/dist/assets/{index-7BP6FaCZ.js → index-BTzhV9ST.js} +2 -2
  154. package/dashboard/dist/assets/{index-7BP6FaCZ.js.map → index-BTzhV9ST.js.map} +1 -1
  155. package/dashboard/dist/assets/{index-fgBDhnI6.js → index-Bcv5k8Dw.js} +2 -2
  156. package/dashboard/dist/assets/{index-fgBDhnI6.js.map → index-Bcv5k8Dw.js.map} +1 -1
  157. package/dashboard/dist/assets/{index-BE0phFw0.js → index-BjfoWzJL.js} +2 -2
  158. package/dashboard/dist/assets/{index-BE0phFw0.js.map → index-BjfoWzJL.js.map} +1 -1
  159. package/dashboard/dist/assets/{index-BYNN9N1T.js → index-BvVJ538E.js} +2 -2
  160. package/dashboard/dist/assets/{index-BYNN9N1T.js.map → index-BvVJ538E.js.map} +1 -1
  161. package/dashboard/dist/assets/{index-Cfv86_L9.js → index-CSpTj5DB.js} +2 -2
  162. package/dashboard/dist/assets/{index-Cfv86_L9.js.map → index-CSpTj5DB.js.map} +1 -1
  163. package/dashboard/dist/assets/{index-errgQT5x.js → index-CcjdA7jA.js} +23 -23
  164. package/dashboard/dist/assets/index-CcjdA7jA.js.map +1 -0
  165. package/dashboard/dist/assets/{index-CLPVqbVY.js → index-DQi6CjqF.js} +2 -2
  166. package/dashboard/dist/assets/{index-CLPVqbVY.js.map → index-DQi6CjqF.js.map} +1 -1
  167. package/dashboard/dist/assets/index-DglcqBHn.js +6 -0
  168. package/dashboard/dist/assets/index-DglcqBHn.js.map +1 -0
  169. package/dashboard/dist/assets/{index-Dy-MMYti.js → index-DlO3bCfu.js} +2 -2
  170. package/dashboard/dist/assets/{index-Dy-MMYti.js.map → index-DlO3bCfu.js.map} +1 -1
  171. package/dashboard/dist/assets/{index-CtwbQ_-m.js → index-FYQ9yPhO.js} +2 -2
  172. package/dashboard/dist/assets/{index-CtwbQ_-m.js.map → index-FYQ9yPhO.js.map} +1 -1
  173. package/dashboard/dist/assets/{index-DTtHNC-D.js → index-KcaVfpWn.js} +2 -2
  174. package/dashboard/dist/assets/{index-DTtHNC-D.js.map → index-KcaVfpWn.js.map} +1 -1
  175. package/dashboard/dist/assets/index-cFHoANSG.css +1 -0
  176. package/dashboard/dist/assets/{index-DsWnVyVN.js → index-vAkZ5dZe.js} +2 -2
  177. package/dashboard/dist/assets/{index-DsWnVyVN.js.map → index-vAkZ5dZe.js.map} +1 -1
  178. package/dashboard/dist/assets/{knowledge-arh4NfmL.js → knowledge-Bkvl3cIz.js} +2 -2
  179. package/dashboard/dist/assets/{knowledge-arh4NfmL.js.map → knowledge-Bkvl3cIz.js.map} +1 -1
  180. package/dashboard/dist/assets/{mcp-QGf5jHCo.js → mcp-DEtDLeIQ.js} +2 -2
  181. package/dashboard/dist/assets/{mcp-QGf5jHCo.js.map → mcp-DEtDLeIQ.js.map} +1 -1
  182. package/dashboard/dist/assets/{mcp-query-BEJN1nMZ.js → mcp-query-BCRgnt0K.js} +2 -2
  183. package/dashboard/dist/assets/{mcp-query-BEJN1nMZ.js.map → mcp-query-BCRgnt0K.js.map} +1 -1
  184. package/dashboard/dist/assets/{personas-DYtw1COf.js → personas-CABKq-0L.js} +2 -2
  185. package/dashboard/dist/assets/{personas-DYtw1COf.js.map → personas-CABKq-0L.js.map} +1 -1
  186. package/dashboard/dist/assets/{pipelines-Byi6PnbE.js → pipelines-fuN8dVNl.js} +2 -2
  187. package/dashboard/dist/assets/{pipelines-Byi6PnbE.js.map → pipelines-fuN8dVNl.js.map} +1 -1
  188. package/dashboard/dist/assets/{tasks-D0SQdENz.js → tasks-u3YPNJBo.js} +2 -2
  189. package/dashboard/dist/assets/{tasks-D0SQdENz.js.map → tasks-u3YPNJBo.js.map} +1 -1
  190. package/dashboard/dist/assets/{topics-DgDv5ZXP.js → topics-D37_RAIT.js} +2 -2
  191. package/dashboard/dist/assets/{topics-DgDv5ZXP.js.map → topics-D37_RAIT.js.map} +1 -1
  192. package/dashboard/dist/assets/{useEventHooks-DZaYzE7s.js → useEventHooks-BbXfrFbq.js} +2 -2
  193. package/dashboard/dist/assets/{useEventHooks-DZaYzE7s.js.map → useEventHooks-BbXfrFbq.js.map} +1 -1
  194. package/dashboard/dist/assets/{useNamespace-C1OqiNXN.js → useNamespace-DvuoFTda.js} +2 -2
  195. package/dashboard/dist/assets/{useNamespace-C1OqiNXN.js.map → useNamespace-DvuoFTda.js.map} +1 -1
  196. package/dashboard/dist/assets/{useYamlActivityEvents-CkmXDm-Z.js → useYamlActivityEvents-CL-Uf2cb.js} +2 -2
  197. package/dashboard/dist/assets/{useYamlActivityEvents-CkmXDm-Z.js.map → useYamlActivityEvents-CL-Uf2cb.js.map} +1 -1
  198. package/dashboard/dist/assets/{users-D4DCFPH1.js → users-CMxw_HzK.js} +2 -2
  199. package/dashboard/dist/assets/{users-D4DCFPH1.js.map → users-CMxw_HzK.js.map} +1 -1
  200. package/dashboard/dist/assets/{vendor-icons-BxuyFxH2.js → vendor-icons-Aw7bzBxa.js} +142 -137
  201. package/dashboard/dist/assets/vendor-icons-Aw7bzBxa.js.map +1 -0
  202. package/dashboard/dist/assets/{workflows-qyc0ku_5.js → workflows-Bez-o6fu.js} +2 -2
  203. package/dashboard/dist/assets/{workflows-qyc0ku_5.js.map → workflows-Bez-o6fu.js.map} +1 -1
  204. package/dashboard/dist/assets/{yaml-workflows-DWFww9Xn.js → yaml-workflows-NrXcLsNm.js} +2 -2
  205. package/dashboard/dist/assets/{yaml-workflows-DWFww9Xn.js.map → yaml-workflows-NrXcLsNm.js.map} +1 -1
  206. package/dashboard/dist/index.html +3 -3
  207. package/package.json +1 -1
  208. package/build/system/mcp-servers/admin/ortho.d.ts +0 -10
  209. package/build/system/mcp-servers/admin/ortho.js +0 -242
  210. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js +0 -2
  211. package/dashboard/dist/assets/AvailableEscalationsPage-CVlG_AVC.js.map +0 -1
  212. package/dashboard/dist/assets/CapabilitiesPage-wxmE4917.js +0 -2
  213. package/dashboard/dist/assets/CapabilitiesPage-wxmE4917.js.map +0 -1
  214. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js +0 -2
  215. package/dashboard/dist/assets/EntityTimelinePanel-DrL86Yrf.js.map +0 -1
  216. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js +0 -3
  217. package/dashboard/dist/assets/OperationsPage-i8KcDpKo.js.map +0 -1
  218. package/dashboard/dist/assets/PersonasPage-DSdRb90f.js +0 -2
  219. package/dashboard/dist/assets/PersonasPage-DSdRb90f.js.map +0 -1
  220. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js +0 -2
  221. package/dashboard/dist/assets/RolesPage-DCnW0VmD.js.map +0 -1
  222. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js +0 -2
  223. package/dashboard/dist/assets/ScanSchemeDetailPage-DyLmCamO.js.map +0 -1
  224. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js +0 -2
  225. package/dashboard/dist/assets/ScanStationPage-DoZccU5B.js.map +0 -1
  226. package/dashboard/dist/assets/index-5TblaCXQ.css +0 -1
  227. package/dashboard/dist/assets/index-B7IaBPBg.js +0 -6
  228. package/dashboard/dist/assets/index-B7IaBPBg.js.map +0 -1
  229. package/dashboard/dist/assets/index-errgQT5x.js.map +0 -1
  230. package/dashboard/dist/assets/vendor-icons-BxuyFxH2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index-DTtHNC-D.js","sources":["../../src/pages/workflows/registry/WorkflowConfigsPage.tsx","../../src/components/common/form/RolePicker.tsx","../../src/lib/parse.ts","../../src/pages/workflows/registry/config-form-types.ts","../../src/pages/workflows/registry/WorkflowConfigDetailPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useDiscoveredWorkflows,\n useDeleteWorkflowConfig,\n} from '../../../api/workflows';\nimport {\n Server,\n ShieldCheck, ShieldPlus, ShieldOff, Settings, Wrench, Play, UserCheck,\n} from 'lucide-react';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { DiscoveredWorkflow } from '../../../api/types';\n\n// ── Tier badge ─────────────────────────────────────────────────────────────────\n\nfunction TierBadge({ tier }: { tier: string }) {\n if (tier === 'certified')\n return <span className=\"inline-flex items-center gap-1 text-2xs font-medium text-status-success\"><ShieldCheck className=\"w-3 h-3\" />Certified</span>;\n if (tier === 'registered')\n return <span className=\"inline-flex items-center gap-1 text-2xs font-medium text-text-secondary\"><Settings className=\"w-3 h-3\" />Registered</span>;\n return <span className=\"inline-flex items-center gap-1 text-2xs font-medium text-text-quaternary\"><Wrench className=\"w-3 h-3\" />Durable</span>;\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function WorkflowConfigsPage() {\n const navigate = useNavigate();\n const { data, isLoading } = useDiscoveredWorkflows();\n const deleteConfig = useDeleteWorkflowConfig();\n\n const [search, setSearch] = useState('');\n const [activeQueue, setActiveQueue] = useState<string | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<string | null>(null);\n\n const allWorkflows: DiscoveredWorkflow[] = data ?? [];\n\n const queues = useMemo(\n () => [...new Set(allWorkflows.map((w) => w.task_queue).filter(Boolean) as string[])].sort(),\n [allWorkflows],\n );\n\n const grouped = useMemo(() => {\n const q = search.toLowerCase().trim();\n const targetQueues = activeQueue ? [activeQueue] : queues;\n return targetQueues\n .map((queue) => ({\n queue,\n workflows: allWorkflows.filter(\n (w) =>\n w.task_queue === queue &&\n (!q ||\n w.workflow_type.toLowerCase().includes(q) ||\n w.description?.toLowerCase().includes(q)),\n ),\n }))\n .filter((g) => g.workflows.length > 0);\n }, [allWorkflows, queues, search, activeQueue]);\n\n // Workflows with no queue\n const ungrouped = useMemo(() => {\n const q = search.toLowerCase().trim();\n if (activeQueue) return [];\n return allWorkflows.filter(\n (w) =>\n !w.task_queue &&\n (!q || w.workflow_type.toLowerCase().includes(q) || w.description?.toLowerCase().includes(q)),\n );\n }, [allWorkflows, search, activeQueue]);\n\n const handleRowClick = (row: DiscoveredWorkflow) => {\n if (row.registered) {\n navigate(`/workflows/registry/${encodeURIComponent(row.workflow_type)}`);\n } else {\n navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.workflow_type)}&task_queue=${encodeURIComponent(row.task_queue ?? '')}`);\n }\n };\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteConfig.mutate(confirmDelete, { onSuccess: () => setConfirmDelete(null) });\n };\n\n return (\n <div>\n <PageHeader\n title=\"Registered Workflows\"\n docsHash=\"#docs:dashboard.md:workflow-registry\"\n actions={\n <button onClick={() => navigate('/workflows/registry/new')} className=\"btn-primary text-xs\">\n Register Workflow\n </button>\n }\n />\n\n {/* Sticky filter bar: queue select + search */}\n {!isLoading && queues.length > 0 && (\n <FilterBar>\n <FilterSelect\n label=\"Queue\"\n value={activeQueue ?? ''}\n onChange={(v) => setActiveQueue(v || null)}\n options={queues.map((q) => ({ value: q, label: q }))}\n />\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder={`${allWorkflows.length} workflows…`}\n />\n </FilterBar>\n )}\n\n {/* Content */}\n {isLoading ? (\n <LoadingSkeleton />\n ) : grouped.length === 0 && ungrouped.length === 0 ? (\n <p className=\"text-sm text-text-tertiary mt-8\">\n {search || activeQueue ? 'No workflows match your filter.' : 'No workflows discovered yet.'}\n </p>\n ) : (\n <div className=\"space-y-10\">\n {grouped.map(({ queue, workflows }) => (\n <div key={queue}>\n <div className=\"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border\">\n <Server className=\"w-3 h-3 text-accent\" strokeWidth={1.5} />\n <h2 className=\"section-h2\">{queue}</h2>\n <span className=\"text-xs text-text-quaternary\">{workflows.length}</span>\n </div>\n <WorkflowTableHeader />\n <div className=\"divide-y divide-surface-border/30\">\n {workflows.map((wf) => (\n <WorkflowRow\n key={wf.workflow_type}\n wf={wf}\n onRowClick={handleRowClick}\n onDelete={setConfirmDelete}\n onNavigate={navigate}\n />\n ))}\n </div>\n </div>\n ))}\n\n {ungrouped.length > 0 && (\n <div>\n <div className=\"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border\">\n <Wrench className=\"w-3 h-3 text-text-quaternary\" strokeWidth={1.5} />\n <h2 className=\"section-h2\">No Queue</h2>\n <span className=\"text-xs text-text-quaternary\">{ungrouped.length}</span>\n </div>\n <WorkflowTableHeader />\n <div className=\"divide-y divide-surface-border/30\">\n {ungrouped.map((wf) => (\n <WorkflowRow\n key={wf.workflow_type}\n wf={wf}\n onRowClick={handleRowClick}\n onDelete={setConfirmDelete}\n onNavigate={navigate}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Unregister Workflow\"\n description={\n <>\n Delete the registration for{' '}\n <span className=\"font-mono font-medium text-text-primary\">{confirmDelete}</span>? This\n removes its invocation settings, certification, and interceptor treatment; the workflow\n keeps running as a plain durable workflow. To demote certified → registered instead,\n open the workflow and uncheck Certify — that keeps every setting.\n </>\n }\n isPending={deleteConfig.isPending}\n error={deleteConfig.error as Error | null}\n />\n </div>\n );\n}\n\n// ── Column layout ─────────────────────────────────────────────────────────────\n// [Workflow 1fr] [Tier 7rem] [Access 13rem] [Actions 4.5rem]\nconst ROW_GRID = 'grid grid-cols-[minmax(0,1fr)_7rem_13rem_4.5rem] gap-x-6';\n\nfunction WorkflowTableHeader() {\n return (\n <div className={`${ROW_GRID} px-3 pb-2 pt-1`}>\n <span className=\"text-2xs font-medium text-text-quaternary\">Workflow</span>\n <span className=\"text-2xs font-medium text-text-quaternary\">Tier</span>\n <span className=\"text-2xs font-medium text-text-quaternary\">Access</span>\n <span />\n </div>\n );\n}\n\n// ── Workflow row ───────────────────────────────────────────────────────────────\n\nfunction WorkflowRow({\n wf,\n onRowClick,\n onDelete,\n onNavigate,\n}: {\n wf: DiscoveredWorkflow;\n onRowClick: (wf: DiscoveredWorkflow) => void;\n onDelete: (type: string) => void;\n onNavigate: (path: string) => void;\n}) {\n const escRoles = wf.roles ?? [];\n const invokeRoles = wf.invocation_roles ?? [];\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => onRowClick(wf)}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') onRowClick(wf); }}\n className={`group ${ROW_GRID} py-2 px-3 -mx-3 rounded-md cursor-pointer transition-colors items-center`}\n >\n {/* Col 1: Workflow name + description, single line */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <WorkflowPill\n type={wf.workflow_type}\n size=\"md\"\n variant={wf.tier === 'certified' ? 'certified' : wf.tier === 'registered' ? 'registered' : 'durable'}\n />\n {wf.description && (\n <p className=\"flex-1 min-w-0 truncate text-2xs text-text-tertiary group-hover:text-text-secondary transition-colors\">\n {wf.description}\n </p>\n )}\n </div>\n\n {/* Col 2: Tier */}\n <div>\n <TierBadge tier={wf.tier ?? 'durable'} />\n </div>\n\n {/* Col 3: Access — escalation + invocation roles, single line */}\n <div className=\"flex items-center gap-1.5 min-w-0 overflow-hidden whitespace-nowrap\">\n {escRoles.length > 0 && (\n <>\n <span title=\"Escalation roles\"><ShieldCheck className=\"w-3 h-3 text-text-quaternary shrink-0\" /></span>\n {escRoles.map((r) => <RolePill key={`e-${r}`} role={r} />)}\n </>\n )}\n {invokeRoles.length > 0 && (\n <>\n <span title=\"Invocation roles\"><UserCheck className=\"w-3 h-3 text-text-quaternary shrink-0\" /></span>\n {invokeRoles.map((r) => <RolePill key={`i-${r}`} role={r} />)}\n </>\n )}\n {escRoles.length === 0 && invokeRoles.length === 0 && (\n <span className=\"text-xs text-text-quaternary\">—</span>\n )}\n </div>\n\n {/* Col 4: Actions — revealed on hover */}\n <div className=\"flex items-center justify-end gap-2.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n {wf.invocable && (\n <button\n title=\"Invoke workflow\"\n onClick={(e) => { e.stopPropagation(); onNavigate(`/workflows/start?type=${encodeURIComponent(wf.workflow_type)}&mode=now`); }}\n className=\"text-text-quaternary hover:text-status-success transition-colors\"\n >\n <Play className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {wf.tier === 'durable' && (\n <button\n title=\"Configure workflow\"\n onClick={(e) => { e.stopPropagation(); onNavigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(wf.workflow_type)}&task_queue=${encodeURIComponent(wf.task_queue ?? '')}`); }}\n className=\"text-text-quaternary hover:text-status-info transition-colors\"\n >\n <Wrench className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {wf.tier === 'registered' && (\n <button\n title=\"Certify workflow\"\n onClick={(e) => { e.stopPropagation(); onNavigate(`/workflows/registry/${encodeURIComponent(wf.workflow_type)}`); }}\n className=\"text-text-quaternary hover:text-status-success transition-colors\"\n >\n <ShieldPlus className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {wf.registered && (\n <button\n title=\"Unregister workflow\"\n onClick={(e) => { e.stopPropagation(); onDelete(wf.workflow_type); }}\n className=\"text-text-quaternary hover:text-status-warning transition-colors\"\n >\n <ShieldOff className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ── Loading skeleton ───────────────────────────────────────────────────────────\n\nfunction LoadingSkeleton() {\n return (\n <div className=\"animate-pulse space-y-8 mt-4\">\n {[1, 2].map((i) => (\n <div key={i}>\n <div className=\"h-4 bg-surface-sunken rounded w-36 mb-4\" />\n <div className=\"space-y-4\">\n {[1, 2, 3].map((j) => (\n <div key={j} className=\"space-y-1.5\">\n <div className=\"h-3 bg-surface-sunken rounded w-48\" />\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { User, X, ChevronDown, Check } from 'lucide-react';\nimport { useRoles } from '../../../api/roles';\n\ninterface RolePickerProps {\n selected: string[];\n onChange: (roles: string[]) => void;\n /** Only allow one selection */\n single?: boolean;\n placeholder?: string;\n}\n\nexport function RolePicker({ selected, onChange, single, placeholder }: RolePickerProps) {\n const { data } = useRoles();\n const allRoles = data?.roles ?? [];\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const toggle = (role: string) => {\n if (single) {\n onChange(selected.includes(role) ? [] : [role]);\n setOpen(false);\n } else {\n onChange(\n selected.includes(role)\n ? selected.filter((r) => r !== role)\n : [...selected, role],\n );\n }\n };\n\n const remove = (role: string) => {\n onChange(selected.filter((r) => r !== role));\n };\n\n const placeholderText = placeholder ?? (single ? 'Select role...' : 'Add roles...');\n\n return (\n <div ref={ref} className=\"relative\">\n {/* Selected pills + trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none\"\n >\n {selected.length === 0 && (\n <span className=\"text-xs text-text-tertiary\">{placeholderText}</span>\n )}\n {selected.map((role) => (\n <span\n key={role}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-2xs\"\n >\n <User className=\"w-2.5 h-2.5 shrink-0 text-accent/75\" />\n {role}\n <span\n role=\"button\"\n onClick={(e) => { e.stopPropagation(); remove(role); }}\n className=\"ml-0.5 hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </span>\n </span>\n ))}\n <ChevronDown className={`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {/* Dropdown */}\n {open && (\n <div className=\"absolute z-[100] mt-1 w-full bg-surface-raised border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto\">\n {allRoles.length === 0 ? (\n <p className=\"px-3 py-2 text-xs text-text-tertiary\">No roles defined</p>\n ) : (\n allRoles.map((role) => {\n const isSelected = selected.includes(role);\n return (\n <button\n key={role}\n type=\"button\"\n onClick={() => toggle(role)}\n className={`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${\n isSelected\n ? 'bg-accent/[0.06] text-accent'\n : 'text-text-primary hover:bg-surface-sunken'\n }`}\n >\n <User className=\"w-3 h-3 shrink-0 text-accent/60\" />\n <span className=\"flex-1\">{role}</span>\n {isSelected && <Check className=\"w-3 h-3 shrink-0\" />}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n}\n","export function splitCsv(s: string): string[] {\n return s\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean);\n}\n\nexport function safeParseJson<T = unknown>(\n json: string,\n): { ok: true; data: T } | { ok: false; error: string } {\n try {\n return { ok: true, data: JSON.parse(json) as T };\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : 'Invalid JSON';\n return { ok: false, error: message };\n }\n}\n","import type { LTWorkflowConfig } from '../../../api/types';\n\nexport interface ConfigFormState {\n workflow_type: string;\n description: string;\n task_queue: string;\n default_role: string;\n invocable: boolean;\n roles: string;\n invocation_roles: string;\n consumes: string;\n envelope_schema: string;\n resolver_schema: string;\n cron_schedule: string;\n execute_as: string;\n /**\n * Explicit HITL certification, persisted on the registration. Unchecking\n * demotes certified → registered on save and keeps roles/consumes intact.\n */\n certified: boolean;\n}\n\nexport const EMPTY_FORM: ConfigFormState = {\n workflow_type: '',\n description: '',\n task_queue: '',\n default_role: 'reviewer',\n invocable: false,\n roles: '',\n invocation_roles: '',\n consumes: '',\n envelope_schema: '',\n resolver_schema: '',\n cron_schedule: '',\n execute_as: '',\n certified: false,\n};\n\nexport function configToForm(c: LTWorkflowConfig): ConfigFormState {\n const roles = (c.roles ?? []).join(', ');\n const consumes = (c.consumes ?? []).join(', ');\n return {\n workflow_type: c.workflow_type,\n description: c.description ?? '',\n task_queue: c.task_queue ?? '',\n default_role: c.default_role,\n invocable: c.invocable,\n roles,\n invocation_roles: (c.invocation_roles ?? []).join(', '),\n consumes,\n envelope_schema: c.envelope_schema ? JSON.stringify(c.envelope_schema, null, 2) : '',\n resolver_schema: c.resolver_schema ? JSON.stringify(c.resolver_schema, null, 2) : '',\n cron_schedule: c.cron_schedule ?? '',\n execute_as: c.execute_as ?? '',\n certified: c.certified,\n };\n}\n\nexport const STEP_LABELS = ['Identity', 'Invocation', 'Advanced'];\n\nexport function jsonValid(v: string): boolean {\n if (!v.trim()) return true;\n try { JSON.parse(v); return true; } catch { return false; }\n}\n\nexport function isStepValid(step: number, form: ConfigFormState): boolean {\n if (step === 1) return !!form.workflow_type.trim();\n if (step === 2) return jsonValid(form.envelope_schema);\n if (step === 3) return jsonValid(form.resolver_schema);\n return true;\n}\n\nexport const labelCls = 'label';\nexport const hintCls = 'hint';\nexport const jsonCls = 'input-json w-full';\n\nexport const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n","import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport {\n Code2, Play, ShieldOff,\n} from 'lucide-react';\nimport { useWorkflowConfigs, useUpsertWorkflowConfig, useDeleteWorkflowConfig, useJobs } from '../../../api/workflows';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RolePicker } from '../../../components/common/form/RolePicker';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { NamespacePill } from '../../../components/common/display/NamespacePill';\nimport { splitCsv } from '../../../lib/parse';\nimport { EMPTY_FORM, configToForm, jsonValid } from './config-form-types';\nimport type { ConfigFormState } from './config-form-types';\n\n// ── Local helpers ─────────────────────────────────────────────────────────────\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-4 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"section-h2\">{children}</h2>\n </div>\n );\n}\n\nfunction Field({ label, hint, children }: { label: string; hint?: React.ReactNode; children: React.ReactNode }) {\n return (\n <div className=\"space-y-1.5\">\n <label className=\"label\">{label}</label>\n {children}\n {hint && <p className=\"hint\">{hint}</p>}\n </div>\n );\n}\n\nconst jsonCls = 'input-json w-full';\n\nfunction csvToArray(csv: string): string[] { return splitCsv(csv); }\nfunction arrayToCsv(arr: string[]): string { return arr.join(', '); }\n\nconst SYSTEM_WORKFLOWS = new Set([\n 'mcpQuery', 'mcpDeterministic', 'mcpQueryRouter', 'mcpTriage',\n 'mcpTriageRouter', 'mcpTriageDeterministic', 'insightQuery',\n]);\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function WorkflowConfigDetailPage() {\n const { workflowType } = useParams<{ workflowType: string }>();\n const isNew = !workflowType;\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const { data: configs, isLoading } = useWorkflowConfigs();\n const upsert = useUpsertWorkflowConfig();\n const deleteConfig = useDeleteWorkflowConfig();\n const [confirmUnregister, setConfirmUnregister] = useState(false);\n\n const editing = configs?.find((c) => c.workflow_type === workflowType) ?? null;\n\n const { data: jobsData } = useJobs({ limit: 500 });\n const unregisteredTypes = useMemo(() => {\n const registeredSet = new Set((configs ?? []).map((c) => c.workflow_type));\n const allEntities = new Set((jobsData?.jobs ?? []).map((j: any) => j.entity));\n return [...allEntities]\n .filter((e: string) => !registeredSet.has(e) && !SYSTEM_WORKFLOWS.has(e))\n .sort();\n }, [configs, jobsData]);\n\n const prefillForm = useMemo((): ConfigFormState => {\n if (!isNew) return EMPTY_FORM;\n const prefillType = searchParams.get('workflow_type') ?? '';\n const prefillQueue = searchParams.get('task_queue') ?? '';\n return prefillType || prefillQueue\n ? { ...EMPTY_FORM, workflow_type: prefillType, task_queue: prefillQueue }\n : EMPTY_FORM;\n }, [isNew, searchParams]);\n\n const [form, setForm] = useState<ConfigFormState>(prefillForm);\n const [schemaError, setSchemaError] = useState('');\n const [initialized, setInitialized] = useState(false);\n\n const set = useCallback(\n (field: keyof ConfigFormState, value: string | boolean) =>\n setForm((f) => ({ ...f, [field]: value })),\n [],\n );\n\n useEffect(() => {\n if (initialized) return;\n if (isNew) { setForm(prefillForm); setInitialized(true); return; }\n if (editing) { setForm(configToForm(editing)); setInitialized(true); }\n }, [editing, isNew, initialized, prefillForm]);\n\n const handleSave = () => {\n if (!form.workflow_type.trim()) return;\n setSchemaError('');\n\n let envelope_schema: Record<string, unknown> | null = null;\n let resolver_schema: Record<string, unknown> | null = null;\n try {\n if (form.envelope_schema.trim()) envelope_schema = JSON.parse(form.envelope_schema);\n } catch { setSchemaError('Invalid JSON in Envelope Schema'); return; }\n try {\n if (form.resolver_schema.trim()) resolver_schema = JSON.parse(form.resolver_schema);\n } catch { setSchemaError('Invalid JSON in Resolver Schema'); return; }\n\n upsert.mutate(\n {\n workflow_type: form.workflow_type.trim(),\n description: form.description.trim() || null,\n task_queue: form.task_queue.trim() || null,\n default_role: form.default_role.trim() || 'reviewer',\n invocable: form.invocable,\n certified: form.certified,\n roles: splitCsv(form.roles),\n invocation_roles: splitCsv(form.invocation_roles),\n consumes: splitCsv(form.consumes),\n envelope_schema,\n resolver_schema,\n cron_schedule: form.cron_schedule.trim() || null,\n execute_as: form.execute_as.trim() || null,\n },\n { onSuccess: () => navigate('/workflows/registry') },\n );\n };\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n if (!isNew && !editing) {\n return <p className=\"text-sm text-text-secondary\">Config not found.</p>;\n }\n\n const canSave = !!form.workflow_type.trim() && jsonValid(form.envelope_schema) && jsonValid(form.resolver_schema);\n const showPickList = isNew && !form.workflow_type && unregisteredTypes.length > 0;\n\n return (\n <div>\n {/* Hero */}\n <div className=\"flex items-start justify-between mb-8\">\n <div>\n <h1 className=\"text-3xl font-light font-mono text-text-primary\">\n {isNew ? 'New Workflow' : editing?.workflow_type ?? ''}\n </h1>\n {editing && (\n <div className=\"flex items-center gap-2 mt-2\">\n <NamespacePill namespace=\"durable\" />\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-3 mt-1\">\n <button onClick={() => navigate('/workflows/registry')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={!canSave || upsert.isPending}\n className=\"btn-primary text-xs\"\n >\n {upsert.isPending ? 'Saving…' : isNew ? 'Register' : 'Save'}\n </button>\n </div>\n </div>\n\n {/* Three-column form */}\n <div className=\"grid grid-cols-1 @wall:grid-cols-3 gap-x-14 gap-y-10\">\n\n {/* ── Identity ─────────────────────────────────────────────────── */}\n <div>\n <SectionHeader icon={Code2} color=\"text-accent\">Identity</SectionHeader>\n <div className=\"space-y-5\">\n <Field\n label=\"Workflow Type\"\n hint=\"Register a workflow to configure invocation and HITL escalation routing.\"\n >\n {showPickList ? (\n <div className=\"space-y-2\">\n <p className=\"text-xs text-text-secondary\">Select a durable workflow to register:</p>\n <div className=\"grid gap-1\">\n {(unregisteredTypes as string[]).map((type) => (\n <button\n key={type}\n onClick={() => set('workflow_type', type)}\n className=\"flex items-center gap-2 px-3 py-2 text-left text-xs font-mono rounded-md border border-surface-border hover:border-accent/50 hover:bg-accent/[0.04] transition-colors\"\n >\n {type}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-2 pt-1\">\n <span className=\"text-2xs text-text-tertiary\">or</span>\n <input\n type=\"text\"\n onChange={(e) => set('workflow_type', e.target.value)}\n placeholder=\"Enter type manually\"\n className=\"input font-mono flex-1\"\n />\n </div>\n </div>\n ) : (\n <>\n <input\n type=\"text\"\n value={form.workflow_type}\n onChange={(e) => set('workflow_type', e.target.value)}\n disabled={!isNew}\n placeholder=\"reviewContent\"\n className=\"input font-mono w-full\"\n />\n {isNew && form.workflow_type && unregisteredTypes.length > 0 && (\n <button\n onClick={() => set('workflow_type', '')}\n className=\"text-2xs text-accent hover:underline mt-1\"\n >\n Choose from durable workflows\n </button>\n )}\n </>\n )}\n </Field>\n\n <Field label=\"Description\">\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Describe what this workflow does\"\n className=\"input text-xs w-full\"\n />\n </Field>\n\n <Field label=\"Task Queue\" hint=\"Durable task queue this workflow listens on.\">\n <input\n type=\"text\"\n value={form.task_queue}\n onChange={(e) => set('task_queue', e.target.value)}\n placeholder=\"lt-review\"\n className=\"input font-mono w-full\"\n />\n </Field>\n </div>\n </div>\n\n {/* ── Invocation ───────────────────────────────────────────────── */}\n <div>\n <SectionHeader icon={Play} color=\"text-accent\">Invocation</SectionHeader>\n <div className=\"space-y-5\">\n <div className=\"space-y-1\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.invocable}\n onChange={(e) => set('invocable', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary font-medium\">Invocable</span>\n </label>\n <p className=\"hint\">Allow this workflow to be started from the dashboard or API.</p>\n </div>\n\n {form.invocable ? (\n <>\n <Field label=\"Run As\" hint=\"Bot identity to run under. Default runs as the invoking user.\">\n <BotPicker selected={form.execute_as} onChange={(id) => set('execute_as', id)} />\n </Field>\n\n <Field label=\"Invocation Roles\" hint=\"Only users with these roles can start this workflow. Empty = all authenticated users.\">\n <RolePicker\n selected={csvToArray(form.invocation_roles)}\n onChange={(roles) => set('invocation_roles', arrayToCsv(roles))}\n placeholder=\"Select roles…\"\n />\n </Field>\n\n <Field label=\"Envelope Schema\" hint={<>Pre-fills the JSON editor when invoking. Include <code className=\"font-mono\">data</code> (input) and optional <code className=\"font-mono\">metadata</code>.</>}>\n <textarea\n value={form.envelope_schema}\n onChange={(e) => set('envelope_schema', e.target.value)}\n placeholder={'{\\n \"data\": {},\\n \"metadata\": {}\\n}'}\n className={jsonCls}\n rows={8}\n spellCheck={false}\n />\n {form.envelope_schema.trim() && !jsonValid(form.envelope_schema) && (\n <p className=\"text-2xs text-status-error mt-1\">Invalid JSON</p>\n )}\n </Field>\n </>\n ) : (\n <p className=\"text-2xs text-text-tertiary py-2\">\n Enable <span className=\"font-medium text-text-secondary\">Invocable</span> to configure invocation roles and an input template.\n </p>\n )}\n </div>\n </div>\n\n {/* Escalation & resolution config is ROLE-owned now — a workflow no longer\n declares a resolver schema or a certification tier here. The escalation\n surface (form_schema + resolver_schema, versioned) lives on the target\n role. This section is intentionally hidden from the workflow view. */}\n {editing && (\n <div>\n <SectionHeader icon={ShieldOff} color=\"text-text-tertiary\">Registration</SectionHeader>\n <button\n onClick={() => setConfirmUnregister(true)}\n className=\"flex items-center gap-1.5 text-2xs text-status-warning hover:underline\"\n title=\"Delete this registration — the workflow returns to plain durable\"\n >\n <ShieldOff className=\"w-3 h-3\" /> Unregister workflow\n </button>\n </div>\n )}\n </div>\n\n {(schemaError || upsert.error) && (\n <p className=\"text-xs text-status-error mt-8\">\n {schemaError || (upsert.error as Error).message}\n </p>\n )}\n\n <ConfirmDeleteModal\n open={confirmUnregister}\n onClose={() => setConfirmUnregister(false)}\n onConfirm={() =>\n deleteConfig.mutate(editing!.workflow_type, {\n onSuccess: () => navigate('/workflows/registry'),\n })\n }\n title=\"Unregister Workflow\"\n description={\n <>\n Delete the registration for{' '}\n <span className=\"font-mono font-medium text-text-primary\">{editing?.workflow_type}</span>?\n This removes its invocation settings, certification, and interceptor treatment; the\n workflow keeps running as a plain durable workflow. Escalation schemas versioned on\n roles are untouched.\n </>\n }\n isPending={deleteConfig.isPending}\n error={deleteConfig.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["TierBadge","tier","jsxs","jsx","ShieldCheck","Settings","Wrench","WorkflowConfigsPage","navigate","useNavigate","data","isLoading","useDiscoveredWorkflows","deleteConfig","useDeleteWorkflowConfig","search","setSearch","useState","activeQueue","setActiveQueue","confirmDelete","setConfirmDelete","allWorkflows","queues","useMemo","w","grouped","q","queue","_a","g","ungrouped","handleRowClick","row","handleDelete","PageHeader","FilterBar","FilterSelect","v","FilterInput","LoadingSkeleton","workflows","Server","WorkflowTableHeader","wf","WorkflowRow","ConfirmDeleteModal","Fragment","ROW_GRID","onRowClick","onDelete","onNavigate","escRoles","invokeRoles","e","WorkflowPill","r","RolePill","UserCheck","Play","ShieldPlus","ShieldOff","i","j","RolePicker","selected","onChange","single","placeholder","useRoles","allRoles","open","setOpen","ref","useRef","useEffect","handler","toggle","role","remove","placeholderText","User","X","ChevronDown","isSelected","Check","splitCsv","s","EMPTY_FORM","configToForm","c","roles","consumes","jsonValid","SectionHeader","Icon","color","children","Field","label","hint","jsonCls","csvToArray","csv","arrayToCsv","arr","SYSTEM_WORKFLOWS","WorkflowConfigDetailPage","workflowType","useParams","isNew","searchParams","useSearchParams","configs","useWorkflowConfigs","upsert","useUpsertWorkflowConfig","confirmUnregister","setConfirmUnregister","editing","jobsData","useJobs","unregisteredTypes","registeredSet","prefillForm","prefillType","prefillQueue","form","setForm","schemaError","setSchemaError","initialized","setInitialized","set","useCallback","field","value","f","handleSave","envelope_schema","resolver_schema","canSave","showPickList","NamespacePill","Code2","type","BotPicker","id"],"mappings":"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"}
1
+ {"version":3,"file":"index-KcaVfpWn.js","sources":["../../src/pages/workflows/registry/WorkflowConfigsPage.tsx","../../src/components/common/form/RolePicker.tsx","../../src/lib/parse.ts","../../src/pages/workflows/registry/config-form-types.ts","../../src/pages/workflows/registry/WorkflowConfigDetailPage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport {\n useDiscoveredWorkflows,\n useDeleteWorkflowConfig,\n} from '../../../api/workflows';\nimport {\n Server,\n ShieldCheck, ShieldPlus, ShieldOff, Settings, Wrench, Play, UserCheck,\n} from 'lucide-react';\nimport { FilterBar, FilterSelect, FilterInput } from '../../../components/common/data/FilterBar';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { WorkflowPill } from '../../../components/common/display/WorkflowPill';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport type { DiscoveredWorkflow } from '../../../api/types';\n\n// ── Tier badge ─────────────────────────────────────────────────────────────────\n\nfunction TierBadge({ tier }: { tier: string }) {\n if (tier === 'certified')\n return <span className=\"inline-flex items-center gap-1 text-2xs font-medium text-status-success\"><ShieldCheck className=\"w-3 h-3\" />Certified</span>;\n if (tier === 'registered')\n return <span className=\"inline-flex items-center gap-1 text-2xs font-medium text-text-secondary\"><Settings className=\"w-3 h-3\" />Registered</span>;\n return <span className=\"inline-flex items-center gap-1 text-2xs font-medium text-text-quaternary\"><Wrench className=\"w-3 h-3\" />Durable</span>;\n}\n\n// ── Page ──────────────────────────────────────────────────────────────────────\n\nexport function WorkflowConfigsPage() {\n const navigate = useNavigate();\n const { data, isLoading } = useDiscoveredWorkflows();\n const deleteConfig = useDeleteWorkflowConfig();\n\n const [search, setSearch] = useState('');\n const [activeQueue, setActiveQueue] = useState<string | null>(null);\n const [confirmDelete, setConfirmDelete] = useState<string | null>(null);\n\n const allWorkflows: DiscoveredWorkflow[] = data ?? [];\n\n const queues = useMemo(\n () => [...new Set(allWorkflows.map((w) => w.task_queue).filter(Boolean) as string[])].sort(),\n [allWorkflows],\n );\n\n const grouped = useMemo(() => {\n const q = search.toLowerCase().trim();\n const targetQueues = activeQueue ? [activeQueue] : queues;\n return targetQueues\n .map((queue) => ({\n queue,\n workflows: allWorkflows.filter(\n (w) =>\n w.task_queue === queue &&\n (!q ||\n w.workflow_type.toLowerCase().includes(q) ||\n w.description?.toLowerCase().includes(q)),\n ),\n }))\n .filter((g) => g.workflows.length > 0);\n }, [allWorkflows, queues, search, activeQueue]);\n\n // Workflows with no queue\n const ungrouped = useMemo(() => {\n const q = search.toLowerCase().trim();\n if (activeQueue) return [];\n return allWorkflows.filter(\n (w) =>\n !w.task_queue &&\n (!q || w.workflow_type.toLowerCase().includes(q) || w.description?.toLowerCase().includes(q)),\n );\n }, [allWorkflows, search, activeQueue]);\n\n const handleRowClick = (row: DiscoveredWorkflow) => {\n if (row.registered) {\n navigate(`/workflows/registry/${encodeURIComponent(row.workflow_type)}`);\n } else {\n navigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(row.workflow_type)}&task_queue=${encodeURIComponent(row.task_queue ?? '')}`);\n }\n };\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteConfig.mutate(confirmDelete, { onSuccess: () => setConfirmDelete(null) });\n };\n\n return (\n <div>\n <PageHeader\n title=\"Registered Workflows\"\n docsHash=\"#docs:dashboard.md:workflow-registry\"\n actions={\n <button onClick={() => navigate('/workflows/registry/new')} className=\"btn-primary text-xs\">\n Register Workflow\n </button>\n }\n />\n\n {/* Sticky filter bar: queue select + search */}\n {!isLoading && queues.length > 0 && (\n <FilterBar>\n <FilterSelect\n label=\"Queue\"\n value={activeQueue ?? ''}\n onChange={(v) => setActiveQueue(v || null)}\n options={queues.map((q) => ({ value: q, label: q }))}\n />\n <FilterInput\n label=\"Search\"\n value={search}\n onChange={setSearch}\n placeholder={`${allWorkflows.length} workflows…`}\n />\n </FilterBar>\n )}\n\n {/* Content */}\n {isLoading ? (\n <LoadingSkeleton />\n ) : grouped.length === 0 && ungrouped.length === 0 ? (\n <p className=\"text-sm text-text-tertiary mt-8\">\n {search || activeQueue ? 'No workflows match your filter.' : 'No workflows discovered yet.'}\n </p>\n ) : (\n <div className=\"space-y-10\">\n {grouped.map(({ queue, workflows }) => (\n <div key={queue}>\n <div className=\"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border\">\n <Server className=\"w-3 h-3 text-accent\" strokeWidth={1.5} />\n <h2 className=\"section-h2\">{queue}</h2>\n <span className=\"text-xs text-text-quaternary\">{workflows.length}</span>\n </div>\n <WorkflowTableHeader />\n <div className=\"divide-y divide-surface-border/30\">\n {workflows.map((wf) => (\n <WorkflowRow\n key={wf.workflow_type}\n wf={wf}\n onRowClick={handleRowClick}\n onDelete={setConfirmDelete}\n onNavigate={navigate}\n />\n ))}\n </div>\n </div>\n ))}\n\n {ungrouped.length > 0 && (\n <div>\n <div className=\"sticky top-[60px] z-10 bg-surface flex items-center gap-2 py-2 mb-2 border-b border-surface-border\">\n <Wrench className=\"w-3 h-3 text-text-quaternary\" strokeWidth={1.5} />\n <h2 className=\"section-h2\">No Queue</h2>\n <span className=\"text-xs text-text-quaternary\">{ungrouped.length}</span>\n </div>\n <WorkflowTableHeader />\n <div className=\"divide-y divide-surface-border/30\">\n {ungrouped.map((wf) => (\n <WorkflowRow\n key={wf.workflow_type}\n wf={wf}\n onRowClick={handleRowClick}\n onDelete={setConfirmDelete}\n onNavigate={navigate}\n />\n ))}\n </div>\n </div>\n )}\n </div>\n )}\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Unregister Workflow\"\n description={\n <>\n Delete the registration for{' '}\n <span className=\"font-mono font-medium text-text-primary\">{confirmDelete}</span>? This\n removes its invocation settings, certification, and interceptor treatment; the workflow\n keeps running as a plain durable workflow. To demote certified → registered instead,\n open the workflow and uncheck Certify — that keeps every setting.\n </>\n }\n isPending={deleteConfig.isPending}\n error={deleteConfig.error as Error | null}\n />\n </div>\n );\n}\n\n// ── Column layout ─────────────────────────────────────────────────────────────\n// [Workflow 1fr] [Tier 7rem] [Access 13rem] [Actions 4.5rem]\nconst ROW_GRID = 'grid grid-cols-[minmax(0,1fr)_7rem_13rem_4.5rem] gap-x-6';\n\nfunction WorkflowTableHeader() {\n return (\n <div className={`${ROW_GRID} px-3 pb-2 pt-1`}>\n <span className=\"text-2xs font-medium text-text-quaternary\">Workflow</span>\n <span className=\"text-2xs font-medium text-text-quaternary\">Tier</span>\n <span className=\"text-2xs font-medium text-text-quaternary\">Access</span>\n <span />\n </div>\n );\n}\n\n// ── Workflow row ───────────────────────────────────────────────────────────────\n\nfunction WorkflowRow({\n wf,\n onRowClick,\n onDelete,\n onNavigate,\n}: {\n wf: DiscoveredWorkflow;\n onRowClick: (wf: DiscoveredWorkflow) => void;\n onDelete: (type: string) => void;\n onNavigate: (path: string) => void;\n}) {\n const escRoles = wf.roles ?? [];\n const invokeRoles = wf.invocation_roles ?? [];\n\n return (\n <div\n role=\"button\"\n tabIndex={0}\n onClick={() => onRowClick(wf)}\n onKeyDown={(e) => { if (e.key === 'Enter' || e.key === ' ') onRowClick(wf); }}\n className={`group ${ROW_GRID} py-2 px-3 -mx-3 rounded-md cursor-pointer transition-colors items-center`}\n >\n {/* Col 1: Workflow name + description, single line */}\n <div className=\"flex items-center gap-3 min-w-0\">\n <WorkflowPill\n type={wf.workflow_type}\n size=\"md\"\n variant={wf.tier === 'certified' ? 'certified' : wf.tier === 'registered' ? 'registered' : 'durable'}\n />\n {wf.description && (\n <p className=\"flex-1 min-w-0 truncate text-2xs text-text-tertiary group-hover:text-text-secondary transition-colors\">\n {wf.description}\n </p>\n )}\n </div>\n\n {/* Col 2: Tier */}\n <div>\n <TierBadge tier={wf.tier ?? 'durable'} />\n </div>\n\n {/* Col 3: Access — escalation + invocation roles, single line */}\n <div className=\"flex items-center gap-1.5 min-w-0 overflow-hidden whitespace-nowrap\">\n {escRoles.length > 0 && (\n <>\n <span title=\"Escalation roles\"><ShieldCheck className=\"w-3 h-3 text-text-quaternary shrink-0\" /></span>\n {escRoles.map((r) => <RolePill key={`e-${r}`} role={r} />)}\n </>\n )}\n {invokeRoles.length > 0 && (\n <>\n <span title=\"Invocation roles\"><UserCheck className=\"w-3 h-3 text-text-quaternary shrink-0\" /></span>\n {invokeRoles.map((r) => <RolePill key={`i-${r}`} role={r} />)}\n </>\n )}\n {escRoles.length === 0 && invokeRoles.length === 0 && (\n <span className=\"text-xs text-text-quaternary\">—</span>\n )}\n </div>\n\n {/* Col 4: Actions — revealed on hover */}\n <div className=\"flex items-center justify-end gap-2.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n {wf.invocable && (\n <button\n title=\"Invoke workflow\"\n onClick={(e) => { e.stopPropagation(); onNavigate(`/workflows/start?type=${encodeURIComponent(wf.workflow_type)}&mode=now`); }}\n className=\"text-text-quaternary hover:text-status-success transition-colors\"\n >\n <Play className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {wf.tier === 'durable' && (\n <button\n title=\"Configure workflow\"\n onClick={(e) => { e.stopPropagation(); onNavigate(`/workflows/registry/new?workflow_type=${encodeURIComponent(wf.workflow_type)}&task_queue=${encodeURIComponent(wf.task_queue ?? '')}`); }}\n className=\"text-text-quaternary hover:text-status-info transition-colors\"\n >\n <Wrench className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {wf.tier === 'registered' && (\n <button\n title=\"Certify workflow\"\n onClick={(e) => { e.stopPropagation(); onNavigate(`/workflows/registry/${encodeURIComponent(wf.workflow_type)}`); }}\n className=\"text-text-quaternary hover:text-status-success transition-colors\"\n >\n <ShieldPlus className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {wf.registered && (\n <button\n title=\"Unregister workflow\"\n onClick={(e) => { e.stopPropagation(); onDelete(wf.workflow_type); }}\n className=\"text-text-quaternary hover:text-status-warning transition-colors\"\n >\n <ShieldOff className=\"w-3.5 h-3.5\" />\n </button>\n )}\n </div>\n </div>\n );\n}\n\n// ── Loading skeleton ───────────────────────────────────────────────────────────\n\nfunction LoadingSkeleton() {\n return (\n <div className=\"animate-pulse space-y-8 mt-4\">\n {[1, 2].map((i) => (\n <div key={i}>\n <div className=\"h-4 bg-surface-sunken rounded w-36 mb-4\" />\n <div className=\"space-y-4\">\n {[1, 2, 3].map((j) => (\n <div key={j} className=\"space-y-1.5\">\n <div className=\"h-3 bg-surface-sunken rounded w-48\" />\n <div className=\"h-3 bg-surface-sunken rounded w-full\" />\n </div>\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { User, X, ChevronDown, Check } from 'lucide-react';\nimport { useRoles } from '../../../api/roles';\n\ninterface RolePickerProps {\n selected: string[];\n onChange: (roles: string[]) => void;\n /** Only allow one selection */\n single?: boolean;\n placeholder?: string;\n}\n\nexport function RolePicker({ selected, onChange, single, placeholder }: RolePickerProps) {\n const { data } = useRoles();\n const allRoles = data?.roles ?? [];\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, []);\n\n const toggle = (role: string) => {\n if (single) {\n onChange(selected.includes(role) ? [] : [role]);\n setOpen(false);\n } else {\n onChange(\n selected.includes(role)\n ? selected.filter((r) => r !== role)\n : [...selected, role],\n );\n }\n };\n\n const remove = (role: string) => {\n onChange(selected.filter((r) => r !== role));\n };\n\n const placeholderText = placeholder ?? (single ? 'Select role...' : 'Add roles...');\n\n return (\n <div ref={ref} className=\"relative\">\n {/* Selected pills + trigger */}\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"flex flex-wrap items-center gap-1.5 w-full min-h-[34px] px-2 py-1.5 bg-surface-sunken border border-surface-border rounded-md text-left cursor-pointer hover:border-accent/40 transition-colors focus:ring-1 focus:ring-accent focus:outline-none\"\n >\n {selected.length === 0 && (\n <span className=\"text-xs text-text-tertiary\">{placeholderText}</span>\n )}\n {selected.map((role) => (\n <span\n key={role}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-lg bg-accent/[0.08] text-text-secondary text-2xs\"\n >\n <User className=\"w-2.5 h-2.5 shrink-0 text-accent/75\" />\n {role}\n <span\n role=\"button\"\n onClick={(e) => { e.stopPropagation(); remove(role); }}\n className=\"ml-0.5 hover:text-status-error transition-colors\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </span>\n </span>\n ))}\n <ChevronDown className={`w-3.5 h-3.5 ml-auto shrink-0 text-text-tertiary transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {/* Dropdown */}\n {open && (\n <div className=\"absolute z-[100] mt-1 w-full bg-surface-raised border border-surface-border rounded-md shadow-lg max-h-48 overflow-y-auto\">\n {allRoles.length === 0 ? (\n <p className=\"px-3 py-2 text-xs text-text-tertiary\">No roles defined</p>\n ) : (\n allRoles.map((role) => {\n const isSelected = selected.includes(role);\n return (\n <button\n key={role}\n type=\"button\"\n onClick={() => toggle(role)}\n className={`flex items-center gap-2 w-full px-3 py-1.5 text-left text-xs transition-colors ${\n isSelected\n ? 'bg-accent/[0.06] text-accent'\n : 'text-text-primary hover:bg-surface-sunken'\n }`}\n >\n <User className=\"w-3 h-3 shrink-0 text-accent/60\" />\n <span className=\"flex-1\">{role}</span>\n {isSelected && <Check className=\"w-3 h-3 shrink-0\" />}\n </button>\n );\n })\n )}\n </div>\n )}\n </div>\n );\n}\n","export function splitCsv(s: string): string[] {\n return s\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean);\n}\n\nexport function safeParseJson<T = unknown>(\n json: string,\n): { ok: true; data: T } | { ok: false; error: string } {\n try {\n return { ok: true, data: JSON.parse(json) as T };\n } catch (e: unknown) {\n const message = e instanceof Error ? e.message : 'Invalid JSON';\n return { ok: false, error: message };\n }\n}\n","import type { LTWorkflowConfig } from '../../../api/types';\n\nexport interface ConfigFormState {\n workflow_type: string;\n description: string;\n task_queue: string;\n default_role: string;\n invocable: boolean;\n roles: string;\n invocation_roles: string;\n consumes: string;\n envelope_schema: string;\n resolver_schema: string;\n cron_schedule: string;\n execute_as: string;\n /**\n * Explicit HITL certification, persisted on the registration. Unchecking\n * demotes certified → registered on save and keeps roles/consumes intact.\n */\n certified: boolean;\n}\n\nexport const EMPTY_FORM: ConfigFormState = {\n workflow_type: '',\n description: '',\n task_queue: '',\n default_role: 'reviewer',\n invocable: false,\n roles: '',\n invocation_roles: '',\n consumes: '',\n envelope_schema: '',\n resolver_schema: '',\n cron_schedule: '',\n execute_as: '',\n certified: false,\n};\n\nexport function configToForm(c: LTWorkflowConfig): ConfigFormState {\n const roles = (c.roles ?? []).join(', ');\n const consumes = (c.consumes ?? []).join(', ');\n return {\n workflow_type: c.workflow_type,\n description: c.description ?? '',\n task_queue: c.task_queue ?? '',\n default_role: c.default_role,\n invocable: c.invocable,\n roles,\n invocation_roles: (c.invocation_roles ?? []).join(', '),\n consumes,\n envelope_schema: c.envelope_schema ? JSON.stringify(c.envelope_schema, null, 2) : '',\n resolver_schema: c.resolver_schema ? JSON.stringify(c.resolver_schema, null, 2) : '',\n cron_schedule: c.cron_schedule ?? '',\n execute_as: c.execute_as ?? '',\n certified: c.certified,\n };\n}\n\nexport const STEP_LABELS = ['Identity', 'Invocation', 'Advanced'];\n\nexport function jsonValid(v: string): boolean {\n if (!v.trim()) return true;\n try { JSON.parse(v); return true; } catch { return false; }\n}\n\nexport function isStepValid(step: number, form: ConfigFormState): boolean {\n if (step === 1) return !!form.workflow_type.trim();\n if (step === 2) return jsonValid(form.envelope_schema);\n if (step === 3) return jsonValid(form.resolver_schema);\n return true;\n}\n\nexport const labelCls = 'label';\nexport const hintCls = 'hint';\nexport const jsonCls = 'input-json w-full';\n\nexport const DEFAULT_ENVELOPE = '{\\n \"data\": {},\\n \"metadata\": {}\\n}';\n","import { useState, useEffect, useCallback, useMemo } from 'react';\nimport { useParams, useNavigate, useSearchParams } from 'react-router-dom';\nimport {\n Code2, Play, ShieldOff,\n} from 'lucide-react';\nimport { useWorkflowConfigs, useUpsertWorkflowConfig, useDeleteWorkflowConfig, useJobs } from '../../../api/workflows';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { RolePicker } from '../../../components/common/form/RolePicker';\nimport { BotPicker } from '../../../components/common/form/BotPicker';\nimport { NamespacePill } from '../../../components/common/display/NamespacePill';\nimport { splitCsv } from '../../../lib/parse';\nimport { EMPTY_FORM, configToForm, jsonValid } from './config-form-types';\nimport type { ConfigFormState } from './config-form-types';\n\n// ── Local helpers ─────────────────────────────────────────────────────────────\n\nfunction SectionHeader({ icon: Icon, color, children }: { icon: React.ElementType; color: string; children: React.ReactNode }) {\n return (\n <div className=\"flex items-center gap-2 mb-4 pb-2 border-b border-surface-border\">\n <Icon className={`w-4 h-4 ${color}`} strokeWidth={1.5} />\n <h2 className=\"section-h2\">{children}</h2>\n </div>\n );\n}\n\nfunction Field({ label, hint, children }: { label: string; hint?: React.ReactNode; children: React.ReactNode }) {\n return (\n <div className=\"space-y-1.5\">\n <label className=\"label\">{label}</label>\n {children}\n {hint && <p className=\"hint\">{hint}</p>}\n </div>\n );\n}\n\nconst jsonCls = 'input-json w-full';\n\nfunction csvToArray(csv: string): string[] { return splitCsv(csv); }\nfunction arrayToCsv(arr: string[]): string { return arr.join(', '); }\n\nconst SYSTEM_WORKFLOWS = new Set([\n 'mcpQuery', 'mcpDeterministic', 'mcpQueryRouter', 'mcpTriage',\n 'mcpTriageRouter', 'mcpTriageDeterministic', 'insightQuery',\n]);\n\n// ── Page ─────────────────────────────────────────────────────────────────────\n\nexport function WorkflowConfigDetailPage() {\n const { workflowType } = useParams<{ workflowType: string }>();\n const isNew = !workflowType;\n const navigate = useNavigate();\n const [searchParams] = useSearchParams();\n const { data: configs, isLoading } = useWorkflowConfigs();\n const upsert = useUpsertWorkflowConfig();\n const deleteConfig = useDeleteWorkflowConfig();\n const [confirmUnregister, setConfirmUnregister] = useState(false);\n\n const editing = configs?.find((c) => c.workflow_type === workflowType) ?? null;\n\n const { data: jobsData } = useJobs({ limit: 500 });\n const unregisteredTypes = useMemo(() => {\n const registeredSet = new Set((configs ?? []).map((c) => c.workflow_type));\n const allEntities = new Set((jobsData?.jobs ?? []).map((j: any) => j.entity));\n return [...allEntities]\n .filter((e: string) => !registeredSet.has(e) && !SYSTEM_WORKFLOWS.has(e))\n .sort();\n }, [configs, jobsData]);\n\n const prefillForm = useMemo((): ConfigFormState => {\n if (!isNew) return EMPTY_FORM;\n const prefillType = searchParams.get('workflow_type') ?? '';\n const prefillQueue = searchParams.get('task_queue') ?? '';\n return prefillType || prefillQueue\n ? { ...EMPTY_FORM, workflow_type: prefillType, task_queue: prefillQueue }\n : EMPTY_FORM;\n }, [isNew, searchParams]);\n\n const [form, setForm] = useState<ConfigFormState>(prefillForm);\n const [schemaError, setSchemaError] = useState('');\n const [initialized, setInitialized] = useState(false);\n\n const set = useCallback(\n (field: keyof ConfigFormState, value: string | boolean) =>\n setForm((f) => ({ ...f, [field]: value })),\n [],\n );\n\n useEffect(() => {\n if (initialized) return;\n if (isNew) { setForm(prefillForm); setInitialized(true); return; }\n if (editing) { setForm(configToForm(editing)); setInitialized(true); }\n }, [editing, isNew, initialized, prefillForm]);\n\n const handleSave = () => {\n if (!form.workflow_type.trim()) return;\n setSchemaError('');\n\n let envelope_schema: Record<string, unknown> | null = null;\n let resolver_schema: Record<string, unknown> | null = null;\n try {\n if (form.envelope_schema.trim()) envelope_schema = JSON.parse(form.envelope_schema);\n } catch { setSchemaError('Invalid JSON in Envelope Schema'); return; }\n try {\n if (form.resolver_schema.trim()) resolver_schema = JSON.parse(form.resolver_schema);\n } catch { setSchemaError('Invalid JSON in Resolver Schema'); return; }\n\n upsert.mutate(\n {\n workflow_type: form.workflow_type.trim(),\n description: form.description.trim() || null,\n task_queue: form.task_queue.trim() || null,\n default_role: form.default_role.trim() || 'reviewer',\n invocable: form.invocable,\n certified: form.certified,\n roles: splitCsv(form.roles),\n invocation_roles: splitCsv(form.invocation_roles),\n consumes: splitCsv(form.consumes),\n envelope_schema,\n resolver_schema,\n cron_schedule: form.cron_schedule.trim() || null,\n execute_as: form.execute_as.trim() || null,\n },\n { onSuccess: () => navigate('/workflows/registry') },\n );\n };\n\n if (isLoading) {\n return (\n <div className=\"animate-pulse space-y-4\">\n <div className=\"h-8 bg-surface-sunken rounded w-64\" />\n <div className=\"h-40 bg-surface-sunken rounded\" />\n </div>\n );\n }\n if (!isNew && !editing) {\n return <p className=\"text-sm text-text-secondary\">Config not found.</p>;\n }\n\n const canSave = !!form.workflow_type.trim() && jsonValid(form.envelope_schema) && jsonValid(form.resolver_schema);\n const showPickList = isNew && !form.workflow_type && unregisteredTypes.length > 0;\n\n return (\n <div>\n {/* Hero */}\n <div className=\"flex items-start justify-between mb-8\">\n <div>\n <h1 className=\"text-3xl font-light font-mono text-text-primary\">\n {isNew ? 'New Workflow' : editing?.workflow_type ?? ''}\n </h1>\n {editing && (\n <div className=\"flex items-center gap-2 mt-2\">\n <NamespacePill namespace=\"durable\" />\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-3 mt-1\">\n <button onClick={() => navigate('/workflows/registry')} className=\"btn-ghost text-xs\">\n Cancel\n </button>\n <button\n onClick={handleSave}\n disabled={!canSave || upsert.isPending}\n className=\"btn-primary text-xs\"\n >\n {upsert.isPending ? 'Saving…' : isNew ? 'Register' : 'Save'}\n </button>\n </div>\n </div>\n\n {/* Three-column form */}\n <div className=\"grid grid-cols-1 @wall:grid-cols-3 gap-x-14 gap-y-10\">\n\n {/* ── Identity ─────────────────────────────────────────────────── */}\n <div>\n <SectionHeader icon={Code2} color=\"text-accent\">Identity</SectionHeader>\n <div className=\"space-y-5\">\n <Field\n label=\"Workflow Type\"\n hint=\"Register a workflow to configure invocation and HITL escalation routing.\"\n >\n {showPickList ? (\n <div className=\"space-y-2\">\n <p className=\"text-xs text-text-secondary\">Select a durable workflow to register:</p>\n <div className=\"grid gap-1\">\n {(unregisteredTypes as string[]).map((type) => (\n <button\n key={type}\n onClick={() => set('workflow_type', type)}\n className=\"flex items-center gap-2 px-3 py-2 text-left text-xs font-mono rounded-md border border-surface-border hover:border-accent/50 hover:bg-accent/[0.04] transition-colors\"\n >\n {type}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-2 pt-1\">\n <span className=\"text-2xs text-text-tertiary\">or</span>\n <input\n type=\"text\"\n onChange={(e) => set('workflow_type', e.target.value)}\n placeholder=\"Enter type manually\"\n className=\"input font-mono flex-1\"\n />\n </div>\n </div>\n ) : (\n <>\n <input\n type=\"text\"\n value={form.workflow_type}\n onChange={(e) => set('workflow_type', e.target.value)}\n disabled={!isNew}\n placeholder=\"reviewContent\"\n className=\"input font-mono w-full\"\n />\n {isNew && form.workflow_type && unregisteredTypes.length > 0 && (\n <button\n onClick={() => set('workflow_type', '')}\n className=\"text-2xs text-accent hover:underline mt-1\"\n >\n Choose from durable workflows\n </button>\n )}\n </>\n )}\n </Field>\n\n <Field label=\"Description\">\n <input\n type=\"text\"\n value={form.description}\n onChange={(e) => set('description', e.target.value)}\n placeholder=\"Describe what this workflow does\"\n className=\"input text-xs w-full\"\n />\n </Field>\n\n <Field label=\"Task Queue\" hint=\"Durable task queue this workflow listens on.\">\n <input\n type=\"text\"\n value={form.task_queue}\n onChange={(e) => set('task_queue', e.target.value)}\n placeholder=\"lt-review\"\n className=\"input font-mono w-full\"\n />\n </Field>\n </div>\n </div>\n\n {/* ── Invocation ───────────────────────────────────────────────── */}\n <div>\n <SectionHeader icon={Play} color=\"text-accent\">Invocation</SectionHeader>\n <div className=\"space-y-5\">\n <div className=\"space-y-1\">\n <label className=\"flex items-center gap-2 cursor-pointer\">\n <input\n type=\"checkbox\"\n checked={form.invocable}\n onChange={(e) => set('invocable', e.target.checked)}\n className=\"w-4 h-4 rounded border-border accent-accent\"\n />\n <span className=\"text-xs text-text-primary font-medium\">Invocable</span>\n </label>\n <p className=\"hint\">Allow this workflow to be started from the dashboard or API.</p>\n </div>\n\n {form.invocable ? (\n <>\n <Field label=\"Run As\" hint=\"Bot identity to run under. Default runs as the invoking user.\">\n <BotPicker selected={form.execute_as} onChange={(id) => set('execute_as', id)} />\n </Field>\n\n <Field label=\"Invocation Roles\" hint=\"Only users with these roles can start this workflow. Empty = all authenticated users.\">\n <RolePicker\n selected={csvToArray(form.invocation_roles)}\n onChange={(roles) => set('invocation_roles', arrayToCsv(roles))}\n placeholder=\"Select roles…\"\n />\n </Field>\n\n <Field label=\"Envelope Schema\" hint={<>Pre-fills the JSON editor when invoking. Include <code className=\"font-mono\">data</code> (input) and optional <code className=\"font-mono\">metadata</code>.</>}>\n <textarea\n value={form.envelope_schema}\n onChange={(e) => set('envelope_schema', e.target.value)}\n placeholder={'{\\n \"data\": {},\\n \"metadata\": {}\\n}'}\n className={jsonCls}\n rows={8}\n spellCheck={false}\n />\n {form.envelope_schema.trim() && !jsonValid(form.envelope_schema) && (\n <p className=\"text-2xs text-status-error mt-1\">Invalid JSON</p>\n )}\n </Field>\n </>\n ) : (\n <p className=\"text-2xs text-text-tertiary py-2\">\n Enable <span className=\"font-medium text-text-secondary\">Invocable</span> to configure invocation roles and an input template.\n </p>\n )}\n </div>\n </div>\n\n {/* Escalation & resolution config is ROLE-owned now — a workflow no longer\n declares a resolver schema or a certification tier here. The escalation\n surface (form_schema + resolver_schema, versioned) lives on the target\n role. This section is intentionally hidden from the workflow view. */}\n {editing && (\n <div>\n <SectionHeader icon={ShieldOff} color=\"text-text-tertiary\">Registration</SectionHeader>\n <button\n onClick={() => setConfirmUnregister(true)}\n className=\"flex items-center gap-1.5 text-2xs text-status-warning hover:underline\"\n title=\"Delete this registration — the workflow returns to plain durable\"\n >\n <ShieldOff className=\"w-3 h-3\" /> Unregister workflow\n </button>\n </div>\n )}\n </div>\n\n {(schemaError || upsert.error) && (\n <p className=\"text-xs text-status-error mt-8\">\n {schemaError || (upsert.error as Error).message}\n </p>\n )}\n\n <ConfirmDeleteModal\n open={confirmUnregister}\n onClose={() => setConfirmUnregister(false)}\n onConfirm={() =>\n deleteConfig.mutate(editing!.workflow_type, {\n onSuccess: () => navigate('/workflows/registry'),\n })\n }\n title=\"Unregister Workflow\"\n description={\n <>\n Delete the registration for{' '}\n <span className=\"font-mono font-medium text-text-primary\">{editing?.workflow_type}</span>?\n This removes its invocation settings, certification, and interceptor treatment; the\n workflow keeps running as a plain durable workflow. Escalation schemas versioned on\n roles are untouched.\n </>\n }\n isPending={deleteConfig.isPending}\n error={deleteConfig.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["TierBadge","tier","jsxs","jsx","ShieldCheck","Settings","Wrench","WorkflowConfigsPage","navigate","useNavigate","data","isLoading","useDiscoveredWorkflows","deleteConfig","useDeleteWorkflowConfig","search","setSearch","useState","activeQueue","setActiveQueue","confirmDelete","setConfirmDelete","allWorkflows","queues","useMemo","w","grouped","q","queue","_a","g","ungrouped","handleRowClick","row","handleDelete","PageHeader","FilterBar","FilterSelect","v","FilterInput","LoadingSkeleton","workflows","Server","WorkflowTableHeader","wf","WorkflowRow","ConfirmDeleteModal","Fragment","ROW_GRID","onRowClick","onDelete","onNavigate","escRoles","invokeRoles","e","WorkflowPill","r","RolePill","UserCheck","Play","ShieldPlus","ShieldOff","i","j","RolePicker","selected","onChange","single","placeholder","useRoles","allRoles","open","setOpen","ref","useRef","useEffect","handler","toggle","role","remove","placeholderText","User","X","ChevronDown","isSelected","Check","splitCsv","s","EMPTY_FORM","configToForm","c","roles","consumes","jsonValid","SectionHeader","Icon","color","children","Field","label","hint","jsonCls","csvToArray","csv","arrayToCsv","arr","SYSTEM_WORKFLOWS","WorkflowConfigDetailPage","workflowType","useParams","isNew","searchParams","useSearchParams","configs","useWorkflowConfigs","upsert","useUpsertWorkflowConfig","confirmUnregister","setConfirmUnregister","editing","jobsData","useJobs","unregisteredTypes","registeredSet","prefillForm","prefillType","prefillQueue","form","setForm","schemaError","setSchemaError","initialized","setInitialized","set","useCallback","field","value","f","handleSave","envelope_schema","resolver_schema","canSave","showPickList","NamespacePill","Code2","type","BotPicker","id"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Plus Jakarta Sans,system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--lt-radius-field: .375rem;--lt-radius-section: .625rem;--lt-color-scheme: light;--lt-surface: 255 255 255;--lt-surface-raised: 255 255 255;--lt-surface-sunken: 255 255 255;--lt-text-inverse: 255 255 255;--lt-heading: 51 51 51;--lt-text-primary: 23 23 23;--lt-text-secondary: 55 55 55;--lt-text-tertiary: 88 88 88;--lt-text-quaternary: 122 122 122;--lt-status-active: 37 99 235;--lt-status-pending: 180 83 9;--lt-status-draft: 194 65 12;--lt-status-success: 22 101 52;--lt-status-warning: 180 83 9;--lt-status-error: 220 38 38;--lt-status-pending-graphic: 245 158 11;--lt-status-draft-graphic: 249 115 22;--lt-status-success-graphic: 22 163 74;--lt-status-queued: 3 105 161;--lt-status-claimed: 194 65 12;--lt-status-queued-graphic: 14 165 233;--lt-status-claimed-graphic: 249 115 22;--lt-field-bg: 230 235 242;--lt-field-border: 203 213 225;--lt-select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2394a3b8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");--lt-type-2xs: .6875rem;--lt-type-xs: .75rem;--lt-type-sm: .875rem;--lt-type-base: 1rem;--lt-type-lg: 1.125rem;--lt-type-xl: 1.375rem;--lt-type-2xl: 1.75rem;--lt-space-page-x: clamp(1.25rem, 3vw, 2.5rem);--lt-space-page-y: 2rem;--lt-space-field-y: 1.25rem;--lt-space-col-gap: clamp(1.5rem, 3vw, 3.5rem);--lt-measure-form: 56rem}:root,[data-theme=blue]{--lt-accent: 37 99 235;--lt-accent-hover: 29 78 216;--lt-accent-muted: 147 197 253;--lt-accent-faint: 219 234 254;--lt-surface: 251 252 253;--lt-surface-hover: 232 239 247;--lt-field-bg: 248 250 253;--lt-field-focus: 236 243 254;--lt-field-border: 160 197 245;--lt-surface-border: 186 214 250}[data-theme=blue]{--lt-logo: 24 116 240}[data-theme=violet]{--lt-accent: 123 59 224;--lt-accent-hover: 98 41 190;--lt-accent-muted: 187 156 239;--lt-accent-faint: 229 217 249;--lt-surface: 251 250 252;--lt-surface-hover: 236 234 245;--lt-field-bg: 249 248 252;--lt-field-focus: 244 238 252;--lt-field-border: 200 178 240;--lt-surface-border: 216 198 245}[data-theme=red]{--lt-accent: 220 56 45;--lt-accent-hover: 179 42 34;--lt-accent-muted: 236 154 147;--lt-accent-faint: 247 218 214;--lt-surface: 252 251 251;--lt-surface-hover: 244 236 233;--lt-field-bg: 252 250 249;--lt-field-focus: 252 242 240;--lt-field-border: 240 180 174;--lt-surface-border: 246 202 197}[data-theme=green]{--lt-accent: 22 163 74;--lt-accent-hover: 15 118 55;--lt-accent-muted: 74 222 128;--lt-accent-faint: 187 247 208;--lt-surface: 250 251 250;--lt-surface-hover: 234 242 237;--lt-field-bg: 248 251 249;--lt-field-focus: 240 253 244;--lt-field-border: 150 224 178;--lt-surface-border: 180 232 199}[data-theme=rose]{--lt-accent: 236 72 153;--lt-accent-hover: 219 39 119;--lt-accent-muted: 249 168 212;--lt-accent-faint: 252 231 243;--lt-surface: 252 250 251;--lt-surface-hover: 244 235 239;--lt-field-bg: 252 249 250;--lt-field-focus: 253 242 248;--lt-field-border: 248 185 216;--lt-surface-border: 250 206 228}[data-theme=orange]{--lt-accent: 249 115 22;--lt-accent-hover: 234 88 12;--lt-accent-muted: 254 215 170;--lt-accent-faint: 255 247 237;--lt-surface: 252 251 250;--lt-surface-hover: 244 237 230;--lt-field-bg: 252 250 248;--lt-field-focus: 255 247 237;--lt-field-border: 250 203 166;--lt-surface-border: 252 216 188}body{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface) / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;color-scheme:var(--lt-color-scheme)}*{--tw-border-opacity: 1;border-color:rgb(var(--lt-surface-border) / var(--tw-border-opacity, 1))}*{scrollbar-width:none}*::-webkit-scrollbar{width:0;height:0}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.icon-link{color:rgb(var(--lt-accent) / .65);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.icon-link:hover{--tw-text-opacity: 1;color:rgb(var(--lt-accent) / var(--tw-text-opacity, 1))}.btn-primary{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent) / var(--tw-bg-opacity, 1));padding:.625rem 1.25rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(var(--lt-text-inverse) / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-primary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent-hover) / var(--tw-bg-opacity, 1))}.btn-primary{border-radius:var(--lt-radius-field)}.btn-secondary{border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--lt-surface-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-raised) / var(--tw-bg-opacity, 1));padding:.625rem 1.25rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-secondary:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-hover) / var(--tw-bg-opacity, 1))}.btn-secondary{border-radius:var(--lt-radius-field)}.btn-ghost{padding:.625rem 1rem;font-size:.875rem;line-height:1.25rem;font-weight:500;--tw-text-opacity: 1;color:rgb(var(--lt-text-secondary) / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.btn-ghost:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-hover) / var(--tw-bg-opacity, 1))}.btn-ghost{border-radius:var(--lt-radius-field)}.row-hover{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.1s}.field,.input,.select,.textarea{border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--lt-field-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-bg) / var(--tw-bg-opacity, 1));padding:.375rem .625rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.field::-moz-placeholder,.input::-moz-placeholder,.select::-moz-placeholder,.textarea::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.field::placeholder,.input::placeholder,.select::placeholder,.textarea::placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.field:focus,.input:focus,.select:focus,.textarea:focus{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-focus) / var(--tw-bg-opacity, 1));outline:2px solid transparent;outline-offset:2px}.\!input{border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--lt-field-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-bg) / var(--tw-bg-opacity, 1));padding:.375rem .625rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.\!input::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.\!input::placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.\!input:focus{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-focus) / var(--tw-bg-opacity, 1));outline:2px solid transparent;outline-offset:2px}.field,.input,.select,.textarea{border-radius:var(--lt-radius-field)}.\!input{border-radius:var(--lt-radius-field)!important}.field,.input,.textarea,.\!input{width:100%}.select{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:1.75rem;background-image:var(--lt-select-chevron);background-repeat:no-repeat;background-position:right .5rem center;background-size:1rem}.textarea{resize:vertical;line-height:1.625}.input-json{width:100%;resize:vertical;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--lt-field-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-bg) / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-family:JetBrains Mono,Fira Code,ui-monospace,monospace;font-size:var(--lt-type-2xs);--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);line-height:1.625;--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.input-json::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.input-json::placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.input-json:focus{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-focus) / var(--tw-bg-opacity, 1));outline:2px solid transparent;outline-offset:2px}.input-json{border-radius:var(--lt-radius-field)}.textarea-quiet{width:100%;resize:none;overflow:hidden;border-width:1px;--tw-border-opacity: 1;border-color:rgb(var(--lt-field-border) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-bg) / var(--tw-bg-opacity, 1));padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem;line-height:1.625;--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.textarea-quiet::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.textarea-quiet::placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.textarea-quiet:focus{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-focus) / var(--tw-bg-opacity, 1));outline:2px solid transparent;outline-offset:2px}.textarea-quiet{border-radius:var(--lt-radius-field)}.\!label,.label{margin-bottom:.125rem;display:block;font-size:.75rem;line-height:1rem;font-weight:600;--tw-text-opacity: 1;color:rgb(var(--lt-text-secondary) / var(--tw-text-opacity, 1))}.hint{margin-top:.25rem;font-size:var(--lt-type-2xs);line-height:1.375;--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.heading-1{font-size:2.125rem;font-weight:300;font-variant-caps:small-caps;letter-spacing:.02em;line-height:1.2;color:rgb(var(--lt-heading))}.heading-2{font-size:1.5rem;font-weight:300;font-variant-caps:small-caps;letter-spacing:.02em;color:rgb(var(--lt-heading))}.heading-3{font-size:1.25rem;font-weight:300;font-variant-caps:small-caps;letter-spacing:.02em;color:rgb(var(--lt-heading))}.section-header{margin-bottom:.75rem;display:block;border-bottom-width:1px;border-color:rgb(var(--lt-surface-border) / .3);padding-bottom:.375rem;font-size:1.25rem;font-weight:300;font-variant-caps:small-caps;letter-spacing:.03em;color:rgb(var(--lt-heading))}.section-h2{font-size:1.25rem;font-weight:300;font-variant-caps:small-caps;letter-spacing:.03em;color:rgb(var(--lt-heading))}.dot-ring{mask-image:radial-gradient(circle closest-side,transparent calc(100% - 1.5px),#000 calc(100% - .75px));-webkit-mask-image:radial-gradient(circle closest-side,transparent calc(100% - 1.5px),#000 calc(100% - .75px))}.logo-mark{background-color:rgb(var(--lt-logo, var(--lt-accent)));mask-image:var(--logo-url);mask-repeat:no-repeat;mask-position:center;mask-size:contain;-webkit-mask-image:var(--logo-url);-webkit-mask-repeat:no-repeat;-webkit-mask-position:center;-webkit-mask-size:contain}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0;right:0;bottom:0;left:0}.inset-4{top:1rem;right:1rem;bottom:1rem;left:1rem}.inset-y-0{top:0;bottom:0}.-left-\[3px\]{left:-3px}.-right-0\.5{right:-.125rem}.-right-1{right:-.25rem}.-top-0\.5{top:-.125rem}.-top-1{top:-.25rem}.-top-\[0\.35em\]{top:-.35em}.bottom-0{bottom:0}.bottom-1{bottom:.25rem}.bottom-14{bottom:3.5rem}.bottom-2{bottom:.5rem}.bottom-3{bottom:.75rem}.left-0{left:0}.left-1\/2{left:50%}.left-2\.5{left:.625rem}.left-4{left:1rem}.left-56{left:14rem}.left-\[4px\]{left:4px}.left-\[7px\]{left:7px}.right-0{right:0}.right-1{right:.25rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1{top:.25rem}.top-1\/2{top:50%}.top-14{top:3.5rem}.top-16{top:4rem}.top-2{top:.5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-6{top:1.5rem}.top-\[2\.75rem\]{top:2.75rem}.top-\[3px\]{top:3px}.top-\[60px\]{top:60px}.top-full{top:100%}.z-0{z-index:0}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.z-\[1\]{z-index:1}.z-\[45\]{z-index:45}.z-\[5\]{z-index:5}.z-\[60\]{z-index:60}.z-\[9999\]{z-index:9999}.col-span-2{grid-column:span 2 / span 2}.col-span-full{grid-column:1 / -1}.float-right{float:right}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.-mx-10{margin-left:-2.5rem;margin-right:-2.5rem}.-mx-2{margin-left:-.5rem;margin-right:-.5rem}.-mx-3{margin-left:-.75rem;margin-right:-.75rem}.-mx-page-x{margin-left:calc(var(--lt-space-page-x) * -1);margin-right:calc(var(--lt-space-page-x) * -1)}.-my-1{margin-top:-.25rem;margin-bottom:-.25rem}.mx-1{margin-left:.25rem;margin-right:.25rem}.mx-3{margin-left:.75rem;margin-right:.75rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0\.5{margin-top:.125rem;margin-bottom:.125rem}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-8{margin-top:2rem;margin-bottom:2rem}.-mb-16{margin-bottom:-4rem}.-ml-10{margin-left:-2.5rem}.-ml-8{margin-left:-2rem}.-ml-\[12\.5rem\]{margin-left:-12.5rem}.-ml-\[9\.75rem\]{margin-left:-9.75rem}.-ml-page-x{margin-left:calc(var(--lt-space-page-x) * -1)}.-mr-0\.5{margin-right:-.125rem}.-mr-1{margin-right:-.25rem}.-mr-10{margin-right:-2.5rem}.-mr-page-x{margin-right:calc(var(--lt-space-page-x) * -1)}.-mt-1{margin-top:-.25rem}.-mt-10{margin-top:-2.5rem}.-mt-2{margin-top:-.5rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.-mt-8{margin-top:-2rem}.mb-0\.5{margin-bottom:.125rem}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-0\.5{margin-left:.125rem}.ml-1{margin-left:.25rem}.ml-1\.5{margin-left:.375rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.ml-6{margin-left:1.5rem}.ml-7{margin-left:1.75rem}.ml-8{margin-left:2rem}.ml-\[19px\]{margin-left:19px}.ml-auto{margin-left:auto}.mr-1\.5{margin-right:.375rem}.mr-16{margin-right:4rem}.mr-2{margin-right:.5rem}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-3\.5{margin-top:.875rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-7{margin-top:1.75rem}.mt-8{margin-top:2rem}.mt-\[3em\]{margin-top:3em}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-square{aspect-ratio:1 / 1}.h-0\.5{height:.125rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-40{height:10rem}.h-48{height:12rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-60{height:15rem}.h-64{height:16rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-96{height:24rem}.h-\[12\.5rem\]{height:12.5rem}.h-\[14px\]{height:14px}.h-\[15px\]{height:15px}.h-\[16rem\]{height:16rem}.h-\[18px\]{height:18px}.h-\[7px\]{height:7px}.h-\[80px\]{height:80px}.h-\[9px\]{height:9px}.h-\[calc\(100vh-5\.25rem\)\]{height:calc(100vh - 5.25rem)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-0{max-height:0px}.max-h-40{max-height:10rem}.max-h-44{max-height:11rem}.max-h-48{max-height:12rem}.max-h-60{max-height:15rem}.max-h-64{max-height:16rem}.max-h-80{max-height:20rem}.max-h-\[200px\]{max-height:200px}.max-h-\[280px\]{max-height:280px}.max-h-\[300px\]{max-height:300px}.max-h-\[30vh\]{max-height:30vh}.max-h-\[400px\]{max-height:400px}.max-h-\[40vh\]{max-height:40vh}.max-h-\[50vh\]{max-height:50vh}.max-h-\[60vh\]{max-height:60vh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[900px\]{max-height:900px}.max-h-\[90vh\]{max-height:90vh}.max-h-\[calc\(100vh-220px\)\]{max-height:calc(100vh - 220px)}.max-h-\[calc\(100vh-3\.5rem\)\]{max-height:calc(100vh - 3.5rem)}.max-h-\[calc\(100vh-8rem\)\]{max-height:calc(100vh - 8rem)}.max-h-none{max-height:none}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[160px\]{min-height:160px}.min-h-\[200px\]{min-height:200px}.min-h-\[28px\]{min-height:28px}.min-h-\[300px\]{min-height:300px}.min-h-\[34px\]{min-height:34px}.min-h-\[360px\]{min-height:360px}.min-h-\[40vh\]{min-height:40vh}.min-h-\[48px\]{min-height:48px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[60px\]{min-height:60px}.min-h-\[80px\]{min-height:80px}.min-h-\[calc\(100vh-12rem\)\]{min-height:calc(100vh - 12rem)}.min-h-\[calc\(100vh-80px\)\]{min-height:calc(100vh - 80px)}.min-h-screen{min-height:100vh}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-1\/3{width:33.333333%}.w-1\/4{width:25%}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-2\/3{width:66.666667%}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-48{width:12rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.w-60{width:15rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-80{width:20rem}.w-9{width:2.25rem}.w-\[10\%\]{width:10%}.w-\[10rem\]{width:10rem}.w-\[11\%\]{width:11%}.w-\[12\%\]{width:12%}.w-\[12\.5rem\]{width:12.5rem}.w-\[120px\]{width:120px}.w-\[12rem\]{width:12rem}.w-\[14px\]{width:14px}.w-\[15px\]{width:15px}.w-\[16rem\]{width:16rem}.w-\[18px\]{width:18px}.w-\[200px\]{width:200px}.w-\[22rem\]{width:22rem}.w-\[280px\]{width:280px}.w-\[28rem\]{width:28rem}.w-\[30\%\]{width:30%}.w-\[36rem\]{width:36rem}.w-\[380px\]{width:380px}.w-\[40vw\]{width:40vw}.w-\[440px\]{width:440px}.w-\[48rem\]{width:48rem}.w-\[60px\]{width:60px}.w-\[7\%\]{width:7%}.w-\[7px\]{width:7px}.w-\[8\%\]{width:8%}.w-\[80\%\]{width:80%}.w-\[9px\]{width:9px}.w-auto{width:auto}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-px{width:1px}.min-w-0{min-width:0px}.min-w-4{min-width:1rem}.min-w-64{min-width:16rem}.min-w-\[11rem\]{min-width:11rem}.min-w-\[120px\]{min-width:120px}.min-w-\[12rem\]{min-width:12rem}.min-w-\[140px\]{min-width:140px}.min-w-\[14px\]{min-width:14px}.min-w-\[14rem\]{min-width:14rem}.min-w-\[16rem\]{min-width:16rem}.min-w-\[180px\]{min-width:180px}.min-w-\[18px\]{min-width:18px}.min-w-\[20rem\]{min-width:20rem}.min-w-\[260px\]{min-width:260px}.min-w-\[2rem\]{min-width:2rem}.min-w-\[6rem\]{min-width:6rem}.min-w-\[800px\]{min-width:800px}.min-w-\[80px\]{min-width:80px}.min-w-\[min\(16rem\,100\%\)\]{min-width:min(16rem,100%)}.min-w-max{min-width:-moz-max-content;min-width:max-content}.max-w-0{max-width:0px}.max-w-2xl{max-width:42rem}.max-w-3xl{max-width:48rem}.max-w-48{max-width:12rem}.max-w-64{max-width:16rem}.max-w-\[120px\]{max-width:120px}.max-w-\[150px\]{max-width:150px}.max-w-\[160px\]{max-width:160px}.max-w-\[16rem\]{max-width:16rem}.max-w-\[180px\]{max-width:180px}.max-w-\[19rem\]{max-width:19rem}.max-w-\[200px\]{max-width:200px}.max-w-\[220px\]{max-width:220px}.max-w-\[24rem\]{max-width:24rem}.max-w-\[25rem\]{max-width:25rem}.max-w-\[32rem\]{max-width:32rem}.max-w-\[460px\]{max-width:460px}.max-w-\[85\%\]{max-width:85%}.max-w-\[85vw\]{max-width:85vw}.max-w-\[90vw\]{max-width:90vw}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-form{max-width:var(--lt-measure-form)}.max-w-full{max-width:100%}.max-w-md{max-width:28rem}.max-w-prose{max-width:65ch}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.origin-center{transform-origin:center}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[60vh\]{--tw-translate-y: -60vh;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-4{--tw-translate-x: 1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[120vw\]{--tw-translate-x: 120vw;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[18px\]{--tw-translate-x: 18px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[3px\]{--tw-translate-x: 3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rotate-\[120deg\]{--tw-rotate: -120deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-90{--tw-rotate: 90deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[3\]{--tw-scale-x: 3;--tw-scale-y: 3;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.animate-\[field-enter_0\.2s_ease-out\]{animation:field-enter .2s ease-out}.animate-\[field-error-in_0\.3s_ease-out\]{animation:field-error-in .3s ease-out}.animate-\[field-shake_0\.4s_ease-in-out\]{animation:field-shake .4s ease-in-out}.animate-\[section-enter_0\.25s_ease-out\]{animation:section-enter .25s ease-out}.animate-\[triage-glow_6s_ease-in-out_infinite\]{animation:triage-glow 6s ease-in-out infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.cursor-zoom-out{cursor:zoom-out}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.auto-rows-fr{grid-auto-rows:minmax(0,1fr)}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-cols-\[0\.6rem_7rem_minmax\(2rem\,1fr\)_1rem\]{grid-template-columns:.6rem 7rem minmax(2rem,1fr) 1rem}.grid-cols-\[1fr_240px\]{grid-template-columns:1fr 240px}.grid-cols-\[1fr_auto_auto\]{grid-template-columns:1fr auto auto}.grid-cols-\[300px_1fr\]{grid-template-columns:300px 1fr}.grid-cols-\[3fr_1fr\]{grid-template-columns:3fr 1fr}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.grid-cols-\[minmax\(0\,1fr\)_7rem_13rem_4\.5rem\]{grid-template-columns:minmax(0,1fr) 7rem 13rem 4.5rem}.grid-cols-\[repeat\(auto-fill\,minmax\(15rem\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(15rem,1fr))}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.items-baseline{align-items:baseline}.items-stretch{align-items:stretch}.justify-start{justify-content:flex-start}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0{gap:0px}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-1\.5{gap:.375rem}.gap-10{gap:2.5rem}.gap-12{gap:3rem}.gap-16{gap:4rem}.gap-2{gap:.5rem}.gap-2\.5{gap:.625rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-px{gap:1px}.gap-x-10{-moz-column-gap:2.5rem;column-gap:2.5rem}.gap-x-14{-moz-column-gap:3.5rem;column-gap:3.5rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-2\.5{-moz-column-gap:.625rem;column-gap:.625rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-x-6{-moz-column-gap:1.5rem;column-gap:1.5rem}.gap-x-8{-moz-column-gap:2rem;column-gap:2rem}.gap-x-col-gap{-moz-column-gap:var(--lt-space-col-gap);column-gap:var(--lt-space-col-gap)}.gap-y-0\.5{row-gap:.125rem}.gap-y-1{row-gap:.25rem}.gap-y-1\.5{row-gap:.375rem}.gap-y-10{row-gap:2.5rem}.gap-y-2{row-gap:.5rem}.gap-y-3{row-gap:.75rem}.gap-y-4{row-gap:1rem}.gap-y-5{row-gap:1.25rem}.space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(0px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px * var(--tw-space-y-reverse))}.space-y-0\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.125rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.125rem * var(--tw-space-y-reverse))}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-14>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3.5rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-2\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.625rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.625rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.875rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.875rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.25rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.space-y-px>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1px * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1px * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-surface-border>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(var(--lt-surface-border) / var(--tw-divide-opacity, 1))}.divide-surface-border\/30>:not([hidden])~:not([hidden]){border-color:rgb(var(--lt-surface-border) / .3)}.divide-surface-border\/40>:not([hidden])~:not([hidden]){border-color:rgb(var(--lt-surface-border) / .4)}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.justify-self-center{justify-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-x-clip{overflow-x:clip}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-ellipsis{text-overflow:ellipsis}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-\[0\.125em\]{border-radius:.125em}.rounded-\[0\.25em\]{border-radius:.25em}.rounded-\[3px\]{border-radius:3px}.rounded-\[4px\]{border-radius:4px}.rounded-\[var\(--lt-radius-field\)\]{border-radius:var(--lt-radius-field)}.rounded-\[var\(--lt-radius-section\)\]{border-radius:var(--lt-radius-section)}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-r-md{border-top-right-radius:.375rem;border-bottom-right-radius:.375rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-y{border-top-width:1px;border-bottom-width:1px}.border-b{border-bottom-width:1px}.border-l{border-left-width:1px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-accent{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))}.border-accent-faint{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent-faint) / var(--tw-border-opacity, 1))}.border-accent-muted{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent-muted) / var(--tw-border-opacity, 1))}.border-accent-muted\/40{border-color:rgb(var(--lt-accent-muted) / .4)}.border-accent\/10{border-color:rgb(var(--lt-accent) / .1)}.border-accent\/15{border-color:rgb(var(--lt-accent) / .15)}.border-accent\/20{border-color:rgb(var(--lt-accent) / .2)}.border-accent\/25{border-color:rgb(var(--lt-accent) / .25)}.border-accent\/30{border-color:rgb(var(--lt-accent) / .3)}.border-accent\/40{border-color:rgb(var(--lt-accent) / .4)}.border-purple-500\/20{border-color:#a855f733}.border-status-active{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-active) / var(--tw-border-opacity, 1))}.border-status-claimed{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-claimed) / var(--tw-border-opacity, 1))}.border-status-claimed-graphic\/40{border-color:rgb(var(--lt-status-claimed-graphic) / .4)}.border-status-draft{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-draft) / var(--tw-border-opacity, 1))}.border-status-error{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-error) / var(--tw-border-opacity, 1))}.border-status-error\/20{border-color:rgb(var(--lt-status-error) / .2)}.border-status-error\/30{border-color:rgb(var(--lt-status-error) / .3)}.border-status-error\/50{border-color:rgb(var(--lt-status-error) / .5)}.border-status-error\/60{border-color:rgb(var(--lt-status-error) / .6)}.border-status-pending-graphic\/40{border-color:rgb(var(--lt-status-pending-graphic) / .4)}.border-status-pending\/30{border-color:rgb(var(--lt-status-pending) / .3)}.border-status-success{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-success) / var(--tw-border-opacity, 1))}.border-status-success-graphic\/40{border-color:rgb(var(--lt-status-success-graphic) / .4)}.border-status-success\/30{border-color:rgb(var(--lt-status-success) / .3)}.border-status-warning{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-warning) / var(--tw-border-opacity, 1))}.border-status-warning\/20{border-color:rgb(var(--lt-status-warning) / .2)}.border-status-warning\/30{border-color:rgb(var(--lt-status-warning) / .3)}.border-status-warning\/70{border-color:rgb(var(--lt-status-warning) / .7)}.border-surface{--tw-border-opacity: 1;border-color:rgb(var(--lt-surface) / var(--tw-border-opacity, 1))}.border-surface-border{--tw-border-opacity: 1;border-color:rgb(var(--lt-surface-border) / var(--tw-border-opacity, 1))}.border-surface-border\/15{border-color:rgb(var(--lt-surface-border) / .15)}.border-surface-border\/30{border-color:rgb(var(--lt-surface-border) / .3)}.border-surface-border\/40{border-color:rgb(var(--lt-surface-border) / .4)}.border-surface-border\/50{border-color:rgb(var(--lt-surface-border) / .5)}.border-surface-border\/60{border-color:rgb(var(--lt-surface-border) / .6)}.border-surface-field-border{--tw-border-opacity: 1;border-color:rgb(var(--lt-field-border) / var(--tw-border-opacity, 1))}.border-text-inverse\/70{border-color:rgb(var(--lt-text-inverse) / .7)}.border-text-quaternary\/40{border-color:rgb(var(--lt-text-quaternary) / .4)}.border-text-tertiary{--tw-border-opacity: 1;border-color:rgb(var(--lt-text-tertiary) / var(--tw-border-opacity, 1))}.\!border-l-accent{--tw-border-opacity: 1 !important;border-left-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))!important}.border-l-accent{--tw-border-opacity: 1;border-left-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))}.border-l-transparent{border-left-color:transparent}.border-r-surface-border{--tw-border-opacity: 1;border-right-color:rgb(var(--lt-surface-border) / var(--tw-border-opacity, 1))}.border-r-transparent{border-right-color:transparent}.border-t-accent{--tw-border-opacity: 1;border-top-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))}.\!bg-status-error{--tw-bg-opacity: 1 !important;background-color:rgb(var(--lt-status-error) / var(--tw-bg-opacity, 1))!important}.bg-\[a-z\]{background-color:a-z}.bg-accent{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent) / var(--tw-bg-opacity, 1))}.bg-accent-faint{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent-faint) / var(--tw-bg-opacity, 1))}.bg-accent-faint\/50{background-color:rgb(var(--lt-accent-faint) / .5)}.bg-accent-muted{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent-muted) / var(--tw-bg-opacity, 1))}.bg-accent-muted\/20{background-color:rgb(var(--lt-accent-muted) / .2)}.bg-accent\/10{background-color:rgb(var(--lt-accent) / .1)}.bg-accent\/15{background-color:rgb(var(--lt-accent) / .15)}.bg-accent\/20{background-color:rgb(var(--lt-accent) / .2)}.bg-accent\/5{background-color:rgb(var(--lt-accent) / .05)}.bg-accent\/60{background-color:rgb(var(--lt-accent) / .6)}.bg-accent\/\[0\.06\]{background-color:rgb(var(--lt-accent) / .06)}.bg-accent\/\[0\.08\]{background-color:rgb(var(--lt-accent) / .08)}.bg-amber-300\/\[0\.08\]{background-color:#fcd34d14}.bg-amber-400\/\[0\.08\]{background-color:#fbbf2414}.bg-black\/20{background-color:#0003}.bg-black\/30{background-color:#0000004d}.bg-blue-400\/\[0\.08\]{background-color:#60a5fa14}.bg-blue-500\/10{background-color:#3b82f61a}.bg-cyan-400\/\[0\.08\]{background-color:#22d3ee14}.bg-emerald-400\/\[0\.08\]{background-color:#34d39914}.bg-fuchsia-400\/\[0\.08\]{background-color:#e879f914}.bg-green-400\/\[0\.08\]{background-color:#4ade8014}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-indigo-400\/\[0\.08\]{background-color:#818cf814}.bg-lime-400\/\[0\.08\]{background-color:#a3e63514}.bg-orange-400\/\[0\.08\]{background-color:#fb923c14}.bg-pink-300\/\[0\.08\]{background-color:#f9a8d414}.bg-pink-400\/\[0\.08\]{background-color:#f472b614}.bg-purple-400\/\[0\.08\]{background-color:#c084fc14}.bg-purple-500\/10{background-color:#a855f71a}.bg-red-400\/\[0\.08\]{background-color:#f8717114}.bg-rose-300\/\[0\.08\]{background-color:#fda4af14}.bg-rose-400\/\[0\.08\]{background-color:#fb718514}.bg-sky-300\/\[0\.08\]{background-color:#7dd3fc14}.bg-sky-400\/\[0\.08\]{background-color:#38bdf814}.bg-status-active{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-active) / var(--tw-bg-opacity, 1))}.bg-status-active\/10{background-color:rgb(var(--lt-status-active) / .1)}.bg-status-active\/60{background-color:rgb(var(--lt-status-active) / .6)}.bg-status-active\/70{background-color:rgb(var(--lt-status-active) / .7)}.bg-status-claimed-graphic{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-claimed-graphic) / var(--tw-bg-opacity, 1))}.bg-status-claimed-graphic\/15{background-color:rgb(var(--lt-status-claimed-graphic) / .15)}.bg-status-draft{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-draft) / var(--tw-bg-opacity, 1))}.bg-status-draft-graphic{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-draft-graphic) / var(--tw-bg-opacity, 1))}.bg-status-draft\/10{background-color:rgb(var(--lt-status-draft) / .1)}.bg-status-draft\/30{background-color:rgb(var(--lt-status-draft) / .3)}.bg-status-error{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-error) / var(--tw-bg-opacity, 1))}.bg-status-error\/10{background-color:rgb(var(--lt-status-error) / .1)}.bg-status-error\/5{background-color:rgb(var(--lt-status-error) / .05)}.bg-status-error\/70{background-color:rgb(var(--lt-status-error) / .7)}.bg-status-error\/\[0\.04\]{background-color:rgb(var(--lt-status-error) / .04)}.bg-status-pending{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-pending) / var(--tw-bg-opacity, 1))}.bg-status-pending-graphic{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-pending-graphic) / var(--tw-bg-opacity, 1))}.bg-status-pending-graphic\/15{background-color:rgb(var(--lt-status-pending-graphic) / .15)}.bg-status-pending\/10{background-color:rgb(var(--lt-status-pending) / .1)}.bg-status-queued-graphic{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-queued-graphic) / var(--tw-bg-opacity, 1))}.bg-status-success{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-success) / var(--tw-bg-opacity, 1))}.bg-status-success-graphic{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-success-graphic) / var(--tw-bg-opacity, 1))}.bg-status-success-graphic\/15{background-color:rgb(var(--lt-status-success-graphic) / .15)}.bg-status-success\/10{background-color:rgb(var(--lt-status-success) / .1)}.bg-status-success\/20{background-color:rgb(var(--lt-status-success) / .2)}.bg-status-success\/30{background-color:rgb(var(--lt-status-success) / .3)}.bg-status-warning{--tw-bg-opacity: 1;background-color:rgb(var(--lt-status-warning) / var(--tw-bg-opacity, 1))}.bg-status-warning\/10{background-color:rgb(var(--lt-status-warning) / .1)}.bg-status-warning\/15{background-color:rgb(var(--lt-status-warning) / .15)}.bg-status-warning\/5{background-color:rgb(var(--lt-status-warning) / .05)}.bg-status-warning\/\[0\.06\]{background-color:rgb(var(--lt-status-warning) / .06)}.bg-stone-400\/\[0\.08\]{background-color:#a8a29e14}.bg-surface{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface) / var(--tw-bg-opacity, 1))}.bg-surface-border{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-border) / var(--tw-bg-opacity, 1))}.bg-surface-border\/60{background-color:rgb(var(--lt-surface-border) / .6)}.bg-surface-border\/70{background-color:rgb(var(--lt-surface-border) / .7)}.bg-surface-border\/80{background-color:rgb(var(--lt-surface-border) / .8)}.bg-surface-field{--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-bg) / var(--tw-bg-opacity, 1))}.bg-surface-hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-hover) / var(--tw-bg-opacity, 1))}.bg-surface-hover\/30{background-color:rgb(var(--lt-surface-hover) / .3)}.bg-surface-hover\/60{background-color:rgb(var(--lt-surface-hover) / .6)}.bg-surface-raised{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-raised) / var(--tw-bg-opacity, 1))}.bg-surface-raised\/50{background-color:rgb(var(--lt-surface-raised) / .5)}.bg-surface-raised\/\[0\.03\]{background-color:rgb(var(--lt-surface-raised) / .03)}.bg-surface-sunken{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-sunken) / var(--tw-bg-opacity, 1))}.bg-surface-sunken\/15{background-color:rgb(var(--lt-surface-sunken) / .15)}.bg-surface-sunken\/20{background-color:rgb(var(--lt-surface-sunken) / .2)}.bg-surface-sunken\/30{background-color:rgb(var(--lt-surface-sunken) / .3)}.bg-surface-sunken\/40{background-color:rgb(var(--lt-surface-sunken) / .4)}.bg-surface-sunken\/50{background-color:rgb(var(--lt-surface-sunken) / .5)}.bg-surface-sunken\/60{background-color:rgb(var(--lt-surface-sunken) / .6)}.bg-surface-sunken\/75{background-color:rgb(var(--lt-surface-sunken) / .75)}.bg-surface-sunken\/80{background-color:rgb(var(--lt-surface-sunken) / .8)}.bg-surface-sunken\/90{background-color:rgb(var(--lt-surface-sunken) / .9)}.bg-surface\/90{background-color:rgb(var(--lt-surface) / .9)}.bg-surface\/95{background-color:rgb(var(--lt-surface) / .95)}.bg-teal-300\/\[0\.08\]{background-color:#5eead414}.bg-teal-400\/\[0\.08\]{background-color:#2dd4bf14}.bg-text-inverse{--tw-bg-opacity: 1;background-color:rgb(var(--lt-text-inverse) / var(--tw-bg-opacity, 1))}.bg-text-primary\/30{background-color:rgb(var(--lt-text-primary) / .3)}.bg-text-primary\/40{background-color:rgb(var(--lt-text-primary) / .4)}.bg-text-primary\/60{background-color:rgb(var(--lt-text-primary) / .6)}.bg-text-quaternary{--tw-bg-opacity: 1;background-color:rgb(var(--lt-text-quaternary) / var(--tw-bg-opacity, 1))}.bg-text-quaternary\/70{background-color:rgb(var(--lt-text-quaternary) / .7)}.bg-text-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--lt-text-secondary) / var(--tw-bg-opacity, 1))}.bg-text-tertiary{--tw-bg-opacity: 1;background-color:rgb(var(--lt-text-tertiary) / var(--tw-bg-opacity, 1))}.bg-text-tertiary\/30{background-color:rgb(var(--lt-text-tertiary) / .3)}.bg-transparent{background-color:transparent}.bg-violet-300\/\[0\.08\]{background-color:#c4b5fd14}.bg-violet-400\/\[0\.08\]{background-color:#a78bfa14}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-yellow-400\/\[0\.08\]{background-color:#facc1514}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.from-accent\/\[0\.04\]{--tw-gradient-from: rgb(var(--lt-accent) / .04) var(--tw-gradient-from-position);--tw-gradient-to: rgb(var(--lt-accent) / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.fill-surface{fill:rgb(var(--lt-surface) / 1)}.fill-text-primary{fill:rgb(var(--lt-text-primary) / 1)}.fill-text-quaternary{fill:rgb(var(--lt-text-quaternary) / 1)}.fill-text-tertiary{fill:rgb(var(--lt-text-tertiary) / 1)}.stroke-accent{stroke:rgb(var(--lt-accent) / 1)}.stroke-current{stroke:currentColor}.stroke-surface-border{stroke:rgb(var(--lt-surface-border) / 1)}.stroke-text-quaternary{stroke:rgb(var(--lt-text-quaternary) / 1)}.object-contain{-o-object-fit:contain;object-fit:contain}.object-cover{-o-object-fit:cover;object-fit:cover}.object-top{-o-object-position:top;object-position:top}.p-0{padding:0}.p-0\.5{padding:.125rem}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.\!px-2{padding-left:.5rem!important;padding-right:.5rem!important}.\!px-2\.5{padding-left:.625rem!important;padding-right:.625rem!important}.\!py-0\.5{padding-top:.125rem!important;padding-bottom:.125rem!important}.\!py-1\.5{padding-top:.375rem!important;padding-bottom:.375rem!important}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-1\.5{padding-left:.375rem;padding-right:.375rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-3\.5{padding-left:.875rem;padding-right:.875rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.px-page-x{padding-left:var(--lt-space-page-x);padding-right:var(--lt-space-page-x)}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-3\.5{padding-top:.875rem;padding-bottom:.875rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-7{padding-top:1.75rem;padding-bottom:1.75rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[2px\]{padding-top:2px;padding-bottom:2px}.py-px{padding-top:1px;padding-bottom:1px}.pb-0{padding-bottom:0}.pb-0\.5{padding-bottom:.125rem}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-16{padding-bottom:4rem}.pb-2{padding-bottom:.5rem}.pb-24{padding-bottom:6rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-5{padding-bottom:1.25rem}.pb-6{padding-bottom:1.5rem}.pb-8{padding-bottom:2rem}.pl-0{padding-left:0}.pl-1{padding-left:.25rem}.pl-1\.5{padding-left:.375rem}.pl-10{padding-left:2.5rem}.pl-11{padding-left:2.75rem}.pl-14{padding-left:3.5rem}.pl-16{padding-left:4rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-3{padding-left:.75rem}.pl-3\.5{padding-left:.875rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-52{padding-left:13rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pl-\[18px\]{padding-left:18px}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-2\.5{padding-right:.625rem}.pr-28{padding-right:7rem}.pr-3{padding-right:.75rem}.pr-4{padding-right:1rem}.pr-5{padding-right:1.25rem}.pr-6{padding-right:1.5rem}.pr-7{padding-right:1.75rem}.pr-page-x{padding-right:var(--lt-space-page-x)}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-24{padding-top:6rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-8{padding-top:2rem}.pt-9{padding-top:2.25rem}.pt-\[36px\]{padding-top:36px}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.font-mono{font-family:JetBrains Mono,Fira Code,ui-monospace,monospace}.font-sans{font-family:Plus Jakarta Sans,system-ui,-apple-system,sans-serif}.\!text-2xs{font-size:var(--lt-type-2xs)!important}.text-2xl{font-size:1.5rem;line-height:2rem}.text-2xs{font-size:var(--lt-type-2xs)}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[0\.5em\]{font-size:.5em}.text-\[0\.625rem\]{font-size:.625rem}.text-\[0\.7875rem\]{font-size:.7875rem}.text-\[1\.40625rem\]{font-size:1.40625rem}.text-\[10px\]{font-size:10px}.text-\[36px\]{font-size:36px}.text-\[44px\]{font-size:44px}.text-\[8\.5px\]{font-size:8.5px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.lowercase{text-transform:lowercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.italic{font-style:italic}.ordinal{--tw-ordinal: ordinal;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.tabular-nums{--tw-numeric-spacing: tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.leading-5{line-height:1.25rem}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-snug{line-height:1.375}.leading-tight{line-height:1.25}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.15em\]{letter-spacing:.15em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-\[a-z\]{color:a-z}.text-accent{--tw-text-opacity: 1;color:rgb(var(--lt-accent) / var(--tw-text-opacity, 1))}.text-accent-muted{--tw-text-opacity: 1;color:rgb(var(--lt-accent-muted) / var(--tw-text-opacity, 1))}.text-accent\/40{color:rgb(var(--lt-accent) / .4)}.text-accent\/50{color:rgb(var(--lt-accent) / .5)}.text-accent\/60{color:rgb(var(--lt-accent) / .6)}.text-accent\/70{color:rgb(var(--lt-accent) / .7)}.text-accent\/75{color:rgb(var(--lt-accent) / .75)}.text-accent\/80{color:rgb(var(--lt-accent) / .8)}.text-accent\/90{color:rgb(var(--lt-accent) / .9)}.text-amber-300{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.text-amber-400{--tw-text-opacity: 1;color:rgb(251 191 36 / var(--tw-text-opacity, 1))}.text-blue-400{--tw-text-opacity: 1;color:rgb(96 165 250 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-fuchsia-400{--tw-text-opacity: 1;color:rgb(232 121 249 / var(--tw-text-opacity, 1))}.text-green-400{--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.text-heading{--tw-text-opacity: 1;color:rgb(var(--lt-heading) / var(--tw-text-opacity, 1))}.text-indigo-400{--tw-text-opacity: 1;color:rgb(129 140 248 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-lime-400{--tw-text-opacity: 1;color:rgb(163 230 53 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-pink-300{--tw-text-opacity: 1;color:rgb(249 168 212 / var(--tw-text-opacity, 1))}.text-pink-400{--tw-text-opacity: 1;color:rgb(244 114 182 / var(--tw-text-opacity, 1))}.text-purple-400{--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.text-red-400{--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.text-rose-300{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.text-rose-400{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.text-sky-300{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.text-sky-400{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity, 1))}.text-status-active{--tw-text-opacity: 1;color:rgb(var(--lt-status-active) / var(--tw-text-opacity, 1))}.text-status-active\/70{color:rgb(var(--lt-status-active) / .7)}.text-status-claimed{--tw-text-opacity: 1;color:rgb(var(--lt-status-claimed) / var(--tw-text-opacity, 1))}.text-status-draft{--tw-text-opacity: 1;color:rgb(var(--lt-status-draft) / var(--tw-text-opacity, 1))}.text-status-error{--tw-text-opacity: 1;color:rgb(var(--lt-status-error) / var(--tw-text-opacity, 1))}.text-status-error\/50{color:rgb(var(--lt-status-error) / .5)}.text-status-error\/60{color:rgb(var(--lt-status-error) / .6)}.text-status-error\/70{color:rgb(var(--lt-status-error) / .7)}.text-status-error\/80{color:rgb(var(--lt-status-error) / .8)}.text-status-pending{--tw-text-opacity: 1;color:rgb(var(--lt-status-pending) / var(--tw-text-opacity, 1))}.text-status-queued{--tw-text-opacity: 1;color:rgb(var(--lt-status-queued) / var(--tw-text-opacity, 1))}.text-status-success{--tw-text-opacity: 1;color:rgb(var(--lt-status-success) / var(--tw-text-opacity, 1))}.text-status-success\/70{color:rgb(var(--lt-status-success) / .7)}.text-status-success\/80{color:rgb(var(--lt-status-success) / .8)}.text-status-warning{--tw-text-opacity: 1;color:rgb(var(--lt-status-warning) / var(--tw-text-opacity, 1))}.text-status-warning\/40{color:rgb(var(--lt-status-warning) / .4)}.text-stone-400{--tw-text-opacity: 1;color:rgb(168 162 158 / var(--tw-text-opacity, 1))}.text-surface-border{--tw-text-opacity: 1;color:rgb(var(--lt-surface-border) / var(--tw-text-opacity, 1))}.text-teal-300{--tw-text-opacity: 1;color:rgb(94 234 212 / var(--tw-text-opacity, 1))}.text-teal-400{--tw-text-opacity: 1;color:rgb(45 212 191 / var(--tw-text-opacity, 1))}.text-text-inverse{--tw-text-opacity: 1;color:rgb(var(--lt-text-inverse) / var(--tw-text-opacity, 1))}.text-text-inverse\/70{color:rgb(var(--lt-text-inverse) / .7)}.text-text-primary{--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1))}.text-text-quaternary{--tw-text-opacity: 1;color:rgb(var(--lt-text-quaternary) / var(--tw-text-opacity, 1))}.text-text-quaternary\/40{color:rgb(var(--lt-text-quaternary) / .4)}.text-text-quaternary\/50{color:rgb(var(--lt-text-quaternary) / .5)}.text-text-quaternary\/60{color:rgb(var(--lt-text-quaternary) / .6)}.text-text-quaternary\/70{color:rgb(var(--lt-text-quaternary) / .7)}.text-text-secondary{--tw-text-opacity: 1;color:rgb(var(--lt-text-secondary) / var(--tw-text-opacity, 1))}.text-text-tertiary{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.text-text-tertiary\/30{color:rgb(var(--lt-text-tertiary) / .3)}.text-text-tertiary\/40{color:rgb(var(--lt-text-tertiary) / .4)}.text-text-tertiary\/50{color:rgb(var(--lt-text-tertiary) / .5)}.text-text-tertiary\/60{color:rgb(var(--lt-text-tertiary) / .6)}.text-text-tertiary\/70{color:rgb(var(--lt-text-tertiary) / .7)}.text-violet-300{--tw-text-opacity: 1;color:rgb(196 181 253 / var(--tw-text-opacity, 1))}.text-violet-400{--tw-text-opacity: 1;color:rgb(167 139 250 / var(--tw-text-opacity, 1))}.text-yellow-400{--tw-text-opacity: 1;color:rgb(250 204 21 / var(--tw-text-opacity, 1))}.line-through{text-decoration-line:line-through}.decoration-text-tertiary\/30{text-decoration-color:rgb(var(--lt-text-tertiary) / .3)}.accent-accent{accent-color:rgb(var(--lt-accent) / 1)}.accent-status-error{accent-color:rgb(var(--lt-status-error) / 1)}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-55{opacity:.55}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-black\/5{--tw-shadow-color: rgb(0 0 0 / .05);--tw-shadow: var(--tw-shadow-colored)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-accent{--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--lt-accent) / var(--tw-ring-opacity, 1))}.ring-accent\/40{--tw-ring-color: rgb(var(--lt-accent) / .4)}.ring-surface-border{--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--lt-surface-border) / var(--tw-ring-opacity, 1))}.ring-offset-1{--tw-ring-offset-width: 1px}.ring-offset-surface{--tw-ring-offset-color: rgb(var(--lt-surface) / 1)}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.brightness-150{--tw-brightness: brightness(1.5);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-\[2px\]{--tw-backdrop-blur: blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-sm{--tw-backdrop-blur: blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-\[1500ms\]{transition-duration:1.5s}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\@container{container-type:inline-size}.\@container\/filters{container-type:inline-size;container-name:filters}.\@container\/table{container-type:inline-size;container-name:table}.\[animation-delay\:150ms\]{animation-delay:.15s}.\[animation-delay\:300ms\]{animation-delay:.3s}.\[font-variant-caps\:small-caps\]{font-variant-caps:small-caps}@keyframes fadeIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes triage-glow{0%{box-shadow:0 0 3px rgb(var(--lt-accent) / .15)}8.3%{box-shadow:0 0 10px 2px rgb(var(--lt-accent) / .4)}16.7%,to{box-shadow:0 0 3px rgb(var(--lt-accent) / .15)}}.animate-page-enter{animation:fadeIn .15s ease-out both}@keyframes pageFade{0%{opacity:0}to{opacity:1}}.animate-page-in{animation:pageFade .2s ease-out both}@keyframes field-enter{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}@keyframes section-enter{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes field-shake{0%,to{transform:translate(0)}15%{transform:translate(-4px)}30%{transform:translate(3px)}45%{transform:translate(-2px)}60%{transform:translate(1px)}75%{transform:translate(0)}}@keyframes field-error-in{0%{opacity:0;transform:translateY(-2px)}to{opacity:1;transform:translateY(0)}}.bg-stripes{background-image:repeating-linear-gradient(-45deg,transparent,transparent 3px,rgb(var(--lt-text-inverse) / .15) 3px,rgb(var(--lt-text-inverse) / .15) 6px);background-color:rgb(var(--lt-status-pending-graphic))}.placeholder\:italic::-moz-placeholder{font-style:italic}.placeholder\:italic::placeholder{font-style:italic}.placeholder\:text-text-quaternary::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-quaternary) / var(--tw-text-opacity, 1))}.placeholder\:text-text-quaternary::placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-quaternary) / var(--tw-text-opacity, 1))}.placeholder\:text-text-tertiary::-moz-placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.placeholder\:text-text-tertiary::placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.placeholder\:text-text-tertiary\/40::-moz-placeholder{color:rgb(var(--lt-text-tertiary) / .4)}.placeholder\:text-text-tertiary\/40::placeholder{color:rgb(var(--lt-text-tertiary) / .4)}.placeholder\:text-text-tertiary\/50::-moz-placeholder{color:rgb(var(--lt-text-tertiary) / .5)}.placeholder\:text-text-tertiary\/50::placeholder{color:rgb(var(--lt-text-tertiary) / .5)}.first\:ml-0:first-child{margin-left:0}.first\:mt-0:first-child{margin-top:0}.first\:border-t-0:first-child{border-top-width:0px}.first\:pt-1:first-child{padding-top:.25rem}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pr-0:last-child{padding-right:0}.focus-within\:border-accent:focus-within{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))}.focus-within\:ring-1:focus-within{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.hover\:scale-110:hover{--tw-scale-x: 1.1;--tw-scale-y: 1.1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-\[1\.05\]:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-\[1\.5\]:hover{--tw-scale-x: 1.5;--tw-scale-y: 1.5;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-accent:hover{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))}.hover\:border-accent\/40:hover{border-color:rgb(var(--lt-accent) / .4)}.hover\:border-accent\/50:hover{border-color:rgb(var(--lt-accent) / .5)}.hover\:border-accent\/60:hover{border-color:rgb(var(--lt-accent) / .6)}.hover\:border-status-error:hover{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-error) / var(--tw-border-opacity, 1))}.hover\:border-surface-border:hover{--tw-border-opacity: 1;border-color:rgb(var(--lt-surface-border) / var(--tw-border-opacity, 1))}.hover\:border-text-tertiary:hover{--tw-border-opacity: 1;border-color:rgb(var(--lt-text-tertiary) / var(--tw-border-opacity, 1))}.hover\:\!bg-status-error\/90:hover{background-color:rgb(var(--lt-status-error) / .9)!important}.hover\:bg-accent-hover:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent-hover) / var(--tw-bg-opacity, 1))}.hover\:bg-accent-muted:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent-muted) / var(--tw-bg-opacity, 1))}.hover\:bg-accent\/10:hover{background-color:rgb(var(--lt-accent) / .1)}.hover\:bg-accent\/15:hover{background-color:rgb(var(--lt-accent) / .15)}.hover\:bg-accent\/20:hover{background-color:rgb(var(--lt-accent) / .2)}.hover\:bg-accent\/25:hover{background-color:rgb(var(--lt-accent) / .25)}.hover\:bg-accent\/30:hover{background-color:rgb(var(--lt-accent) / .3)}.hover\:bg-accent\/5:hover{background-color:rgb(var(--lt-accent) / .05)}.hover\:bg-accent\/90:hover{background-color:rgb(var(--lt-accent) / .9)}.hover\:bg-accent\/\[0\.04\]:hover{background-color:rgb(var(--lt-accent) / .04)}.hover\:bg-status-error\/10:hover{background-color:rgb(var(--lt-status-error) / .1)}.hover\:bg-status-error\/20:hover{background-color:rgb(var(--lt-status-error) / .2)}.hover\:bg-status-error\/5:hover{background-color:rgb(var(--lt-status-error) / .05)}.hover\:bg-status-error\/80:hover{background-color:rgb(var(--lt-status-error) / .8)}.hover\:bg-status-error\/90:hover{background-color:rgb(var(--lt-status-error) / .9)}.hover\:bg-status-success\/10:hover{background-color:rgb(var(--lt-status-success) / .1)}.hover\:bg-status-success\/20:hover{background-color:rgb(var(--lt-status-success) / .2)}.hover\:bg-status-warning\/\[0\.1\]:hover{background-color:rgb(var(--lt-status-warning) / .1)}.hover\:bg-surface-hover:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-hover) / var(--tw-bg-opacity, 1))}.hover\:bg-surface-hover\/30:hover{background-color:rgb(var(--lt-surface-hover) / .3)}.hover\:bg-surface-hover\/40:hover{background-color:rgb(var(--lt-surface-hover) / .4)}.hover\:bg-surface-hover\/50:hover{background-color:rgb(var(--lt-surface-hover) / .5)}.hover\:bg-surface-raised:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-raised) / var(--tw-bg-opacity, 1))}.hover\:bg-surface-raised\/30:hover{background-color:rgb(var(--lt-surface-raised) / .3)}.hover\:bg-surface-raised\/60:hover{background-color:rgb(var(--lt-surface-raised) / .6)}.hover\:bg-surface-sunken:hover{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-sunken) / var(--tw-bg-opacity, 1))}.hover\:bg-surface-sunken\/40:hover{background-color:rgb(var(--lt-surface-sunken) / .4)}.hover\:bg-surface-sunken\/50:hover{background-color:rgb(var(--lt-surface-sunken) / .5)}.hover\:bg-surface-sunken\/70:hover{background-color:rgb(var(--lt-surface-sunken) / .7)}.hover\:text-accent:hover{--tw-text-opacity: 1;color:rgb(var(--lt-accent) / var(--tw-text-opacity, 1))}.hover\:text-accent-hover:hover{--tw-text-opacity: 1;color:rgb(var(--lt-accent-hover) / var(--tw-text-opacity, 1))}.hover\:text-accent\/80:hover{color:rgb(var(--lt-accent) / .8)}.hover\:text-status-active:hover{--tw-text-opacity: 1;color:rgb(var(--lt-status-active) / var(--tw-text-opacity, 1))}.hover\:text-status-error:hover{--tw-text-opacity: 1;color:rgb(var(--lt-status-error) / var(--tw-text-opacity, 1))}.hover\:text-status-error\/80:hover{color:rgb(var(--lt-status-error) / .8)}.hover\:text-status-success:hover{--tw-text-opacity: 1;color:rgb(var(--lt-status-success) / var(--tw-text-opacity, 1))}.hover\:text-status-success\/80:hover{color:rgb(var(--lt-status-success) / .8)}.hover\:text-status-warning:hover{--tw-text-opacity: 1;color:rgb(var(--lt-status-warning) / var(--tw-text-opacity, 1))}.hover\:text-status-warning\/80:hover{color:rgb(var(--lt-status-warning) / .8)}.hover\:text-text-inverse:hover{--tw-text-opacity: 1;color:rgb(var(--lt-text-inverse) / var(--tw-text-opacity, 1))}.hover\:text-text-primary:hover{--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1))}.hover\:text-text-secondary:hover{--tw-text-opacity: 1;color:rgb(var(--lt-text-secondary) / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-80:hover{opacity:.8}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-md:hover{--tw-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.hover\:brightness-110:hover{--tw-brightness: brightness(1.1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.focus\:border-accent:focus{--tw-border-opacity: 1;border-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))}.focus\:border-status-error:focus{--tw-border-opacity: 1;border-color:rgb(var(--lt-status-error) / var(--tw-border-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-inset:focus{--tw-ring-inset: inset}.focus\:ring-accent:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(var(--lt-accent) / var(--tw-ring-opacity, 1))}.focus\:ring-accent\/30:focus{--tw-ring-color: rgb(var(--lt-accent) / .3)}.focus\:ring-accent\/40:focus{--tw-ring-color: rgb(var(--lt-accent) / .4)}.focus\:ring-accent\/50:focus{--tw-ring-color: rgb(var(--lt-accent) / .5)}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-accent\/40:focus-visible{--tw-ring-color: rgb(var(--lt-accent) / .4)}.focus-visible\:ring-status-warning\/40:focus-visible{--tw-ring-color: rgb(var(--lt-status-warning) / .4)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:text-text-tertiary:disabled{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.disabled\:no-underline:disabled{text-decoration-line:none}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:hover\:border-surface-border:hover:disabled{--tw-border-opacity: 1;border-color:rgb(var(--lt-surface-border) / var(--tw-border-opacity, 1))}.disabled\:hover\:bg-transparent:hover:disabled{background-color:transparent}.disabled\:hover\:text-text-tertiary:hover:disabled{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:pointer-events-auto{pointer-events:auto}.group\/srv:hover .group-hover\/srv\:visible{visibility:visible}.group:hover .group-hover\:block{display:block}.group:hover .group-hover\:border-accent\/50{border-color:rgb(var(--lt-accent) / .5)}.group:hover .group-hover\:border-accent\/60{border-color:rgb(var(--lt-accent) / .6)}.group\/pin:hover .group-hover\/pin\:text-accent{--tw-text-opacity: 1;color:rgb(var(--lt-accent) / var(--tw-text-opacity, 1))}.group\/row:hover .group-hover\/row\:text-text-primary{--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1))}.group\/row:hover .group-hover\/row\:text-text-secondary{--tw-text-opacity: 1;color:rgb(var(--lt-text-secondary) / var(--tw-text-opacity, 1))}.group\/section:hover .group-hover\/section\:text-text-tertiary{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.group\/srv:hover .group-hover\/srv\:text-accent,.group:hover .group-hover\:text-accent{--tw-text-opacity: 1;color:rgb(var(--lt-accent) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-accent-hover{--tw-text-opacity: 1;color:rgb(var(--lt-accent-hover) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-status-error{--tw-text-opacity: 1;color:rgb(var(--lt-status-error) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-text-primary{--tw-text-opacity: 1;color:rgb(var(--lt-text-primary) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-text-secondary{--tw-text-opacity: 1;color:rgb(var(--lt-text-secondary) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:text-text-tertiary{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.group:hover .group-hover\:underline{text-decoration-line:underline}.group\/key:hover .group-hover\/key\:opacity-100,.group\/mrow:hover .group-hover\/mrow\:opacity-100,.group\/row:hover .group-hover\/row\:opacity-100,.group\/sched:hover .group-hover\/sched\:opacity-100{opacity:1}.group\/sorthead:hover .group-hover\/sorthead\:opacity-40{opacity:.4}.group\/sub:hover .group-hover\/sub\:opacity-100,.group\/tip:hover .group-hover\/tip\:opacity-100,.group\/trace:hover .group-hover\/trace\:opacity-100,.group:hover .group-hover\:opacity-100{opacity:1}@container table (min-width: 22rem){.\@dict-inline\/table\:grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}}@container (min-width: 22rem){.\@dict-inline\:mt-0{margin-top:0}.\@dict-inline\:inline{display:inline}.\@dict-inline\:inline-flex{display:inline-flex}.\@dict-inline\:hidden{display:none}.\@dict-inline\:grid-cols-\[max-content_1fr\]{grid-template-columns:max-content 1fr}}@container (min-width: 26rem){.\@grp-cols\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@grp-cols\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (min-width: 34rem){.\@form-cols\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width: 38rem){.\@dict-pairs\:grid-cols-\[max-content_1fr_max-content_1fr\]{grid-template-columns:max-content 1fr max-content 1fr}.\@dict-pairs\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}}@container table (min-width: 54rem){.\@split\/table\:table-cell{display:table-cell}}@container (min-width: 54rem){.\@split\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.\@split\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\@split\:grid-cols-\[1\.6fr_1fr\]{grid-template-columns:1.6fr 1fr}.\@split\:grid-cols-\[1fr_240px\]{grid-template-columns:1fr 240px}.\@split\:grid-cols-\[1fr_340px\]{grid-template-columns:1fr 340px}.\@split\:grid-cols-\[1fr_360px\]{grid-template-columns:1fr 360px}.\@split\:grid-cols-\[1fr_400px\]{grid-template-columns:1fr 400px}.\@split\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.\@split\:gap-12{gap:3rem}.\@split\:pt-4{padding-top:1rem}}@container table (min-width: 64rem){.\@wall\/table\:table-cell{display:table-cell}}@container (min-width: 64rem){.\@wall\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.\@wall\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.\@wall\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@container filters (min-width: 72rem){.\@filters\/filters\:flex{display:flex}.\@filters\/filters\:contents{display:contents}.\@filters\/filters\:hidden{display:none}}@media(min-width:640px){.sm\:flex{display:flex}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:1024px){.lg\:col-span-2{grid-column:span 2 / span 2}.lg\:col-span-3{grid-column:span 3 / span 3}.lg\:block{display:block}.lg\:inline{display:inline}.lg\:flex{display:flex}.lg\:table-cell{display:table-cell}.lg\:hidden{display:none}.lg\:w-72{width:18rem}.lg\:border-l{border-left-width:1px}.lg\:border-surface-border{--tw-border-opacity: 1;border-color:rgb(var(--lt-surface-border) / var(--tw-border-opacity, 1))}.lg\:pl-12{padding-left:3rem}}@media(min-width:1280px){.xl\:table-cell{display:table-cell}}.\[\&_p\+p\]\:mt-2 p+p{margin-top:.5rem}.\[\&_p\]\:m-0 p{margin:0}