@hotmeshio/long-tail 0.27.0 → 0.28.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 (386) hide show
  1. package/README.md +9 -2
  2. package/build/api/files.d.ts +5 -0
  3. package/build/api/files.js +19 -2
  4. package/build/api/knowledge.d.ts +3 -1
  5. package/build/api/settings.d.ts +4 -1
  6. package/build/api/settings.js +7 -1
  7. package/build/index.js +9 -4
  8. package/build/lib/db/config-lock.d.ts +10 -0
  9. package/build/lib/db/config-lock.js +28 -0
  10. package/build/lib/db/schemas/041_machine_lines.sql +26 -0
  11. package/build/lib/db/schemas/042_knowledge_edition_labels.sql +9 -0
  12. package/build/lib/events/browser-view.js +8 -2
  13. package/build/lib/events/publish.d.ts +33 -0
  14. package/build/lib/events/publish.js +52 -1
  15. package/build/lib/machines/line.d.ts +7 -1
  16. package/build/lib/machines/line.js +25 -2
  17. package/build/lib/machines/protocol/codec.d.ts +14 -0
  18. package/build/lib/machines/protocol/codec.js +10 -1
  19. package/build/lib/machines/protocol/constants.d.ts +1 -1
  20. package/build/lib/machines/protocol/constants.js +1 -1
  21. package/build/lib/machines/protocol/contract.d.ts +2 -0
  22. package/build/lib/machines/protocol/contract.js +13 -8
  23. package/build/lib/machines/site/mosquitto-conf.d.ts +9 -4
  24. package/build/lib/machines/site/mosquitto-conf.js +32 -22
  25. package/build/lib/machines/site/site-conf.d.ts +13 -3
  26. package/build/lib/machines/site/site-conf.js +31 -8
  27. package/build/lib/machines/transport/callback-feed.d.ts +1 -0
  28. package/build/lib/machines/transport/callback-feed.js +4 -1
  29. package/build/lib/machines/transport/memory.d.ts +2 -0
  30. package/build/lib/machines/transport/memory.js +6 -0
  31. package/build/lib/machines/transport/mqtt-bus.d.ts +2 -0
  32. package/build/lib/machines/transport/mqtt-bus.js +4 -0
  33. package/build/lib/machines/transport/nats-bus.d.ts +3 -0
  34. package/build/lib/machines/transport/nats-bus.js +3 -0
  35. package/build/lib/machines/transport/nats-feed.d.ts +1 -0
  36. package/build/lib/machines/transport/nats-feed.js +4 -1
  37. package/build/lib/machines/transport/pubsub-feed.d.ts +1 -0
  38. package/build/lib/machines/transport/pubsub-feed.js +4 -1
  39. package/build/lib/machines/transport/stream-bus.d.ts +7 -1
  40. package/build/lib/machines/transport/stream-bus.js +17 -5
  41. package/build/lib/machines/transport/streams.d.ts +10 -2
  42. package/build/lib/machines/transport/streams.js +32 -5
  43. package/build/lib/messaging/memory.js +3 -0
  44. package/build/lib/messaging/nats/streams.d.ts +3 -0
  45. package/build/lib/messaging/nats/streams.js +16 -0
  46. package/build/lib/storage/local.d.ts +2 -0
  47. package/build/lib/storage/local.js +3 -0
  48. package/build/lib/storage/s3.d.ts +3 -2
  49. package/build/lib/storage/s3.js +6 -1
  50. package/build/lib/storage/types.d.ts +7 -1
  51. package/build/modules/machines.d.ts +8 -0
  52. package/build/modules/machines.js +16 -0
  53. package/build/routes/file-browser.js +3 -1
  54. package/build/routes/index.js +2 -0
  55. package/build/routes/knowledge.js +6 -5
  56. package/build/routes/machines.d.ts +2 -0
  57. package/build/routes/machines.js +253 -0
  58. package/build/services/knowledge/index.d.ts +4 -2
  59. package/build/services/knowledge/index.js +8 -2
  60. package/build/services/knowledge/lookup-cache.d.ts +8 -0
  61. package/build/services/knowledge/lookup-cache.js +30 -3
  62. package/build/services/knowledge/lookup-refs.js +1 -1
  63. package/build/services/knowledge/sql.d.ts +4 -2
  64. package/build/services/knowledge/sql.js +8 -3
  65. package/build/services/machines/commands.d.ts +5 -5
  66. package/build/services/machines/commands.js +3 -2
  67. package/build/services/machines/config.d.ts +4 -1
  68. package/build/services/machines/config.js +2 -1
  69. package/build/services/machines/contracts.d.ts +28 -0
  70. package/build/services/machines/contracts.js +15 -1
  71. package/build/services/machines/forms.d.ts +26 -1
  72. package/build/services/machines/forms.js +17 -1
  73. package/build/services/machines/gateway/actions.d.ts +14 -1
  74. package/build/services/machines/gateway/admission.d.ts +30 -4
  75. package/build/services/machines/gateway/admission.js +76 -14
  76. package/build/services/machines/gateway/api-escalations.js +4 -0
  77. package/build/services/machines/gateway/dispatcher.d.ts +12 -4
  78. package/build/services/machines/gateway/dispatcher.js +53 -17
  79. package/build/services/machines/gateway/executor.d.ts +13 -2
  80. package/build/services/machines/gateway/executor.js +84 -29
  81. package/build/services/machines/gateway/gateway.d.ts +21 -1
  82. package/build/services/machines/gateway/gateway.js +65 -25
  83. package/build/services/machines/gateway/index.d.ts +3 -0
  84. package/build/services/machines/gateway/index.js +3 -0
  85. package/build/services/machines/gateway/inspect.d.ts +17 -0
  86. package/build/services/machines/gateway/inspect.js +68 -0
  87. package/build/services/machines/gateway/log.d.ts +10 -0
  88. package/build/services/machines/gateway/log.js +20 -0
  89. package/build/services/machines/gateway/lt-http.js +11 -2
  90. package/build/services/machines/gateway/pacing.js +2 -1
  91. package/build/services/machines/gateway/plan-escalation.js +8 -3
  92. package/build/services/machines/gateway/plan-machine.js +41 -16
  93. package/build/services/machines/gateway/plan-shared.d.ts +5 -3
  94. package/build/services/machines/gateway/plan-shared.js +6 -4
  95. package/build/services/machines/gateway/project.d.ts +9 -0
  96. package/build/services/machines/gateway/project.js +55 -0
  97. package/build/services/machines/gateway/receipts.d.ts +3 -0
  98. package/build/services/machines/gateway/receipts.js +3 -1
  99. package/build/services/machines/gateway/reconcile.js +3 -3
  100. package/build/services/machines/gateway/registration.js +1 -1
  101. package/build/services/machines/gateway/reply-waiter.d.ts +8 -3
  102. package/build/services/machines/gateway/reply-waiter.js +37 -16
  103. package/build/services/machines/gateway/state.d.ts +53 -4
  104. package/build/services/machines/gateway/state.js +128 -13
  105. package/build/services/machines/gateway/wire-window.d.ts +21 -0
  106. package/build/services/machines/gateway/wire-window.js +61 -0
  107. package/build/services/machines/gateway/wire.d.ts +58 -0
  108. package/build/services/machines/gateway/wire.js +172 -0
  109. package/build/services/machines/index.d.ts +3 -0
  110. package/build/services/machines/index.js +2 -0
  111. package/build/services/machines/line-index.d.ts +16 -0
  112. package/build/services/machines/line-index.js +39 -0
  113. package/build/services/machines/registry-sql.d.ts +31 -0
  114. package/build/services/machines/registry-sql.js +110 -0
  115. package/build/services/machines/registry-sync.d.ts +31 -0
  116. package/build/services/machines/registry-sync.js +81 -0
  117. package/build/services/machines/registry.d.ts +77 -0
  118. package/build/services/machines/registry.js +158 -0
  119. package/build/services/machines/roles.d.ts +5 -4
  120. package/build/services/machines/roles.js +13 -4
  121. package/build/services/machines/rows.js +10 -1
  122. package/build/services/machines/select.d.ts +3 -2
  123. package/build/services/machines/select.js +4 -3
  124. package/build/services/machines/surface.d.ts +54 -5
  125. package/build/services/machines/surface.js +113 -17
  126. package/build/start/apply-report.d.ts +1 -1
  127. package/build/start/apply-report.js +3 -25
  128. package/build/start/index.js +16 -4
  129. package/build/system/activities/knowledge.d.ts +4 -0
  130. package/build/system/activities/knowledge.js +15 -0
  131. package/build/system/activities/sql.d.ts +2 -0
  132. package/build/system/activities/sql.js +6 -1
  133. package/build/system/index.js +13 -0
  134. package/build/system/mcp-servers/admin/schemas.d.ts +22 -22
  135. package/build/system/mcp-servers/human-queue-schemas.d.ts +7 -7
  136. package/build/system/mcp-servers/knowledge.js +4 -2
  137. package/build/system/mcp-servers/machines-schemas.d.ts +35 -0
  138. package/build/system/mcp-servers/machines-schemas.js +35 -0
  139. package/build/system/mcp-servers/machines.d.ts +20 -0
  140. package/build/system/mcp-servers/machines.js +154 -0
  141. package/build/system/seed/tool-manifests-machines.d.ts +2 -0
  142. package/build/system/seed/tool-manifests-machines.js +88 -0
  143. package/build/tsconfig.tsbuildinfo +1 -1
  144. package/build/types/escalation.d.ts +9 -6
  145. package/build/types/escalation.js +8 -2
  146. package/build/types/events.d.ts +6 -1
  147. package/build/types/index.d.ts +1 -0
  148. package/build/types/machines-view.d.ts +175 -0
  149. package/build/types/machines-view.js +7 -0
  150. package/build/types/machines.d.ts +5 -0
  151. package/build/types/messaging.d.ts +2 -0
  152. package/build/types/startup.d.ts +2 -0
  153. package/dashboard/dist/assets/{AdminDashboard-DlItqxFS.js → AdminDashboard-Bm7VG65H.js} +2 -2
  154. package/dashboard/dist/assets/{AdminDashboard-DlItqxFS.js.map → AdminDashboard-Bm7VG65H.js.map} +1 -1
  155. package/dashboard/dist/assets/{AgentConfigPage-BUmT4a7n.js → AgentConfigPage-aJF7Sdbc.js} +6 -6
  156. package/dashboard/dist/assets/{AgentConfigPage-BUmT4a7n.js.map → AgentConfigPage-aJF7Sdbc.js.map} +1 -1
  157. package/dashboard/dist/assets/{AgentDetailPage-Cww8rlBi.js → AgentDetailPage-GwwghhxT.js} +3 -3
  158. package/dashboard/dist/assets/{AgentDetailPage-Cww8rlBi.js.map → AgentDetailPage-GwwghhxT.js.map} +1 -1
  159. package/dashboard/dist/assets/AgentsPage-DVvCzZyg.js +2 -0
  160. package/dashboard/dist/assets/{AgentsPage-C9UuUKhr.js.map → AgentsPage-DVvCzZyg.js.map} +1 -1
  161. package/dashboard/dist/assets/AvailableEscalationsPage-Cxmcji_K.js +2 -0
  162. package/dashboard/dist/assets/{AvailableEscalationsPage-DrvfXz70.js.map → AvailableEscalationsPage-Cxmcji_K.js.map} +1 -1
  163. package/dashboard/dist/assets/{BotPicker-CDq9XRMp.js → BotPicker-CofRxk4L.js} +2 -2
  164. package/dashboard/dist/assets/{BotPicker-CDq9XRMp.js.map → BotPicker-CofRxk4L.js.map} +1 -1
  165. package/dashboard/dist/assets/{BulkAssignModal-jsvqtrEA.js → BulkAssignModal-BARWuz4L.js} +2 -2
  166. package/dashboard/dist/assets/{BulkAssignModal-jsvqtrEA.js.map → BulkAssignModal-BARWuz4L.js.map} +1 -1
  167. package/dashboard/dist/assets/{CapabilitiesPage-CSCrI6B1.js → CapabilitiesPage-BJAWVNEx.js} +2 -2
  168. package/dashboard/dist/assets/{CapabilitiesPage-CSCrI6B1.js.map → CapabilitiesPage-BJAWVNEx.js.map} +1 -1
  169. package/dashboard/dist/assets/{CollapsibleSection-uD9mn-CQ.js → CollapsibleSection-CtgoaG75.js} +2 -2
  170. package/dashboard/dist/assets/{CollapsibleSection-uD9mn-CQ.js.map → CollapsibleSection-CtgoaG75.js.map} +1 -1
  171. package/dashboard/dist/assets/{ConfirmDeleteModal-BRmx2hA4.js → ConfirmDeleteModal-BYXXBWs6.js} +2 -2
  172. package/dashboard/dist/assets/{ConfirmDeleteModal-BRmx2hA4.js.map → ConfirmDeleteModal-BYXXBWs6.js.map} +1 -1
  173. package/dashboard/dist/assets/{ConnectedAppsPage-DlMzE5a-.js → ConnectedAppsPage-D0JkzWa7.js} +2 -2
  174. package/dashboard/dist/assets/{ConnectedAppsPage-DlMzE5a-.js.map → ConnectedAppsPage-D0JkzWa7.js.map} +1 -1
  175. package/dashboard/dist/assets/{CountdownTimer-sRuM4eM5.js → CountdownTimer-BcFxdZYN.js} +2 -2
  176. package/dashboard/dist/assets/{CountdownTimer-sRuM4eM5.js.map → CountdownTimer-BcFxdZYN.js.map} +1 -1
  177. package/dashboard/dist/assets/{CredentialsPage-bLYydwqa.js → CredentialsPage-DPSY20rV.js} +2 -2
  178. package/dashboard/dist/assets/{CredentialsPage-bLYydwqa.js.map → CredentialsPage-DPSY20rV.js.map} +1 -1
  179. package/dashboard/dist/assets/{CronLabel-D_ATDL2N.js → CronLabel-Dg_Oew_Y.js} +2 -2
  180. package/dashboard/dist/assets/{CronLabel-D_ATDL2N.js.map → CronLabel-Dg_Oew_Y.js.map} +1 -1
  181. package/dashboard/dist/assets/{DropZone-u1JGfR9G.js → DropZone-Cl_Flb16.js} +2 -2
  182. package/dashboard/dist/assets/{DropZone-u1JGfR9G.js.map → DropZone-Cl_Flb16.js.map} +1 -1
  183. package/dashboard/dist/assets/{ElapsedCell-groSMfqB.js → ElapsedCell-Dm3G5fK2.js} +2 -2
  184. package/dashboard/dist/assets/{ElapsedCell-groSMfqB.js.map → ElapsedCell-Dm3G5fK2.js.map} +1 -1
  185. package/dashboard/dist/assets/{EntityTimelinePanel-D-F3_A9m.js → EntityTimelinePanel-CrEEP04e.js} +2 -2
  186. package/dashboard/dist/assets/{EntityTimelinePanel-D-F3_A9m.js.map → EntityTimelinePanel-CrEEP04e.js.map} +1 -1
  187. package/dashboard/dist/assets/{EscalationListSchemaPage-Bad6Jrmr.js → EscalationListSchemaPage-wOInXcjs.js} +3 -3
  188. package/dashboard/dist/assets/{EscalationListSchemaPage-Bad6Jrmr.js.map → EscalationListSchemaPage-wOInXcjs.js.map} +1 -1
  189. package/dashboard/dist/assets/{EscalationSchemaPage-BKi_npI9.js → EscalationSchemaPage-CrIj_g9d.js} +3 -3
  190. package/dashboard/dist/assets/{EscalationSchemaPage-BKi_npI9.js.map → EscalationSchemaPage-CrIj_g9d.js.map} +1 -1
  191. package/dashboard/dist/assets/{EscalationTimeline-DQUUm3b1.js → EscalationTimeline-CeAsl5IT.js} +2 -2
  192. package/dashboard/dist/assets/{EscalationTimeline-DQUUm3b1.js.map → EscalationTimeline-CeAsl5IT.js.map} +1 -1
  193. package/dashboard/dist/assets/{EscalationTitleSelect-3mhXh77a.js → EscalationTitleSelect-D8qpCYiy.js} +2 -2
  194. package/dashboard/dist/assets/{EscalationTitleSelect-3mhXh77a.js.map → EscalationTitleSelect-D8qpCYiy.js.map} +1 -1
  195. package/dashboard/dist/assets/{EscalationsOverview-Qaov-uML.js → EscalationsOverview-CvaqVPsr.js} +2 -2
  196. package/dashboard/dist/assets/{EscalationsOverview-Qaov-uML.js.map → EscalationsOverview-CvaqVPsr.js.map} +1 -1
  197. package/dashboard/dist/assets/{EventTable-V4RF_n58.js → EventTable-Be0JuEl6.js} +2 -2
  198. package/dashboard/dist/assets/{EventTable-V4RF_n58.js.map → EventTable-Be0JuEl6.js.map} +1 -1
  199. package/dashboard/dist/assets/FilterBar-BVyAjIgv.js +2 -0
  200. package/dashboard/dist/assets/FilterBar-BVyAjIgv.js.map +1 -0
  201. package/dashboard/dist/assets/{GraphInvokePage-Djslhf96.js → GraphInvokePage-D_QigJeD.js} +2 -2
  202. package/dashboard/dist/assets/{GraphInvokePage-Djslhf96.js.map → GraphInvokePage-D_QigJeD.js.map} +1 -1
  203. package/dashboard/dist/assets/{HomePage-EjcNxlKx.js → HomePage-C1haeuNy.js} +2 -2
  204. package/dashboard/dist/assets/{HomePage-EjcNxlKx.js.map → HomePage-C1haeuNy.js.map} +1 -1
  205. package/dashboard/dist/assets/LinePage-CWD5pv1g.js +5 -0
  206. package/dashboard/dist/assets/LinePage-CWD5pv1g.js.map +1 -0
  207. package/dashboard/dist/assets/LinesPage-NqChsKcO.js +3 -0
  208. package/dashboard/dist/assets/LinesPage-NqChsKcO.js.map +1 -0
  209. package/dashboard/dist/assets/{ListToolbar-RrEAePOX.js → ListToolbar-BZCNrTh6.js} +2 -2
  210. package/dashboard/dist/assets/{ListToolbar-RrEAePOX.js.map → ListToolbar-BZCNrTh6.js.map} +1 -1
  211. package/dashboard/dist/assets/{McpOverview-8gqiL3Vj.js → McpOverview-yJTYnh1z.js} +2 -2
  212. package/dashboard/dist/assets/{McpOverview-8gqiL3Vj.js.map → McpOverview-yJTYnh1z.js.map} +1 -1
  213. package/dashboard/dist/assets/{McpQueryDetailPage-COyn6Ak5.js → McpQueryDetailPage-ChuLpJ4u.js} +3 -3
  214. package/dashboard/dist/assets/{McpQueryDetailPage-COyn6Ak5.js.map → McpQueryDetailPage-ChuLpJ4u.js.map} +1 -1
  215. package/dashboard/dist/assets/{McpQueryPage-Dj6Qj72w.js → McpQueryPage-9S-v9soF.js} +2 -2
  216. package/dashboard/dist/assets/{McpQueryPage-Dj6Qj72w.js.map → McpQueryPage-9S-v9soF.js.map} +1 -1
  217. package/dashboard/dist/assets/McpRunDetailPage-BhrcfxD5.js +2 -0
  218. package/dashboard/dist/assets/{McpRunDetailPage-80fQn9iX.js.map → McpRunDetailPage-BhrcfxD5.js.map} +1 -1
  219. package/dashboard/dist/assets/{McpRunsPage-DaSsI-EM.js → McpRunsPage-C5_i8_Zx.js} +2 -2
  220. package/dashboard/dist/assets/{McpRunsPage-DaSsI-EM.js.map → McpRunsPage-C5_i8_Zx.js.map} +1 -1
  221. package/dashboard/dist/assets/{NamespacePill-C5epAgq6.js → NamespacePill-OTZD2hzt.js} +2 -2
  222. package/dashboard/dist/assets/{NamespacePill-C5epAgq6.js.map → NamespacePill-OTZD2hzt.js.map} +1 -1
  223. package/dashboard/dist/assets/{OperationsPage-BSu1o2gB.js → OperationsPage-C03CeU5P.js} +2 -2
  224. package/dashboard/dist/assets/{OperationsPage-BSu1o2gB.js.map → OperationsPage-C03CeU5P.js.map} +1 -1
  225. package/dashboard/dist/assets/{OperatorDashboard-HFI4WGIV.js → OperatorDashboard-BzC134Jt.js} +2 -2
  226. package/dashboard/dist/assets/{OperatorDashboard-HFI4WGIV.js.map → OperatorDashboard-BzC134Jt.js.map} +1 -1
  227. package/dashboard/dist/assets/{PageHeader-BSWIspNB.js → PageHeader-Hx8APPwE.js} +2 -2
  228. package/dashboard/dist/assets/{PageHeader-BSWIspNB.js.map → PageHeader-Hx8APPwE.js.map} +1 -1
  229. package/dashboard/dist/assets/{PageHeaderWithStats-DDjopQ-k.js → PageHeaderWithStats-BEQYYBJv.js} +2 -2
  230. package/dashboard/dist/assets/{PageHeaderWithStats-DDjopQ-k.js.map → PageHeaderWithStats-BEQYYBJv.js.map} +1 -1
  231. package/dashboard/dist/assets/{PersonaDetailPage-D0qlBuGi.js → PersonaDetailPage-D0mY9L6j.js} +2 -2
  232. package/dashboard/dist/assets/{PersonaDetailPage-D0qlBuGi.js.map → PersonaDetailPage-D0mY9L6j.js.map} +1 -1
  233. package/dashboard/dist/assets/{PersonasPage-BJClu-5H.js → PersonasPage-FFlm5Eug.js} +2 -2
  234. package/dashboard/dist/assets/{PersonasPage-BJClu-5H.js.map → PersonasPage-FFlm5Eug.js.map} +1 -1
  235. package/dashboard/dist/assets/{PortalPage-CucNZn_w.js → PortalPage-Cpc25uO-.js} +2 -2
  236. package/dashboard/dist/assets/{PortalPage-CucNZn_w.js.map → PortalPage-Cpc25uO-.js.map} +1 -1
  237. package/dashboard/dist/assets/{ProcessDetailPage-B9wMw0RV.js → ProcessDetailPage-Di2J7KwY.js} +2 -2
  238. package/dashboard/dist/assets/{ProcessDetailPage-B9wMw0RV.js.map → ProcessDetailPage-Di2J7KwY.js.map} +1 -1
  239. package/dashboard/dist/assets/{ProcessesListPage-B6k4RpmR.js → ProcessesListPage-BEXwU3Z0.js} +2 -2
  240. package/dashboard/dist/assets/{ProcessesListPage-B6k4RpmR.js.map → ProcessesListPage-BEXwU3Z0.js.map} +1 -1
  241. package/dashboard/dist/assets/{ResolverForm-ZVufJ4G-.js → ResolverForm-2ks-3jXC.js} +6 -6
  242. package/dashboard/dist/assets/{ResolverForm-ZVufJ4G-.js.map → ResolverForm-2ks-3jXC.js.map} +1 -1
  243. package/dashboard/dist/assets/{RoleDetailPage-CTbq0mz4.js → RoleDetailPage-DqoOk0xc.js} +3 -3
  244. package/dashboard/dist/assets/{RoleDetailPage-CTbq0mz4.js.map → RoleDetailPage-DqoOk0xc.js.map} +1 -1
  245. package/dashboard/dist/assets/{RolePill-CoETDpjF.js → RolePill-R5_ctGFy.js} +2 -2
  246. package/dashboard/dist/assets/{RolePill-CoETDpjF.js.map → RolePill-R5_ctGFy.js.map} +1 -1
  247. package/dashboard/dist/assets/{RolesPage-DBKxeam4.js → RolesPage-CPmo8Srr.js} +2 -2
  248. package/dashboard/dist/assets/{RolesPage-DBKxeam4.js.map → RolesPage-CPmo8Srr.js.map} +1 -1
  249. package/dashboard/dist/assets/{RosterWidget-BkLAwEYB.js → RosterWidget-D2yovCKw.js} +2 -2
  250. package/dashboard/dist/assets/{RosterWidget-BkLAwEYB.js.map → RosterWidget-D2yovCKw.js.map} +1 -1
  251. package/dashboard/dist/assets/{RunAsSelector-D2DC4iDf.js → RunAsSelector-CMv96On6.js} +2 -2
  252. package/dashboard/dist/assets/{RunAsSelector-D2DC4iDf.js.map → RunAsSelector-CMv96On6.js.map} +1 -1
  253. package/dashboard/dist/assets/{ScanCodesPage-BlKleaT0.js → ScanCodesPage-CA6cTT-M.js} +2 -2
  254. package/dashboard/dist/assets/{ScanCodesPage-BlKleaT0.js.map → ScanCodesPage-CA6cTT-M.js.map} +1 -1
  255. package/dashboard/dist/assets/{ScanSchemeDetailPage-CTW6gofi.js → ScanSchemeDetailPage-DnctN5-H.js} +2 -2
  256. package/dashboard/dist/assets/{ScanSchemeDetailPage-CTW6gofi.js.map → ScanSchemeDetailPage-DnctN5-H.js.map} +1 -1
  257. package/dashboard/dist/assets/{ScanStationPage-DPRjSPyT.js → ScanStationPage-Bk8RwkKL.js} +2 -2
  258. package/dashboard/dist/assets/{ScanStationPage-DPRjSPyT.js.map → ScanStationPage-Bk8RwkKL.js.map} +1 -1
  259. package/dashboard/dist/assets/{ScopeBadge-CGsTtqFr.js → ScopeBadge-BXZ084nD.js} +2 -2
  260. package/dashboard/dist/assets/{ScopeBadge-CGsTtqFr.js.map → ScopeBadge-BXZ084nD.js.map} +1 -1
  261. package/dashboard/dist/assets/{StickyPagination-CkmX3-Gu.js → StickyPagination-B0FSuUgs.js} +2 -2
  262. package/dashboard/dist/assets/{StickyPagination-CkmX3-Gu.js.map → StickyPagination-B0FSuUgs.js.map} +1 -1
  263. package/dashboard/dist/assets/{StreamMessageDetail-Xm_n510s.js → StreamMessageDetail-BwZEvMpP.js} +2 -2
  264. package/dashboard/dist/assets/{StreamMessageDetail-Xm_n510s.js.map → StreamMessageDetail-BwZEvMpP.js.map} +1 -1
  265. package/dashboard/dist/assets/{SwimlaneTimeline-De48aJan.js → SwimlaneTimeline-BDVQEaMw.js} +2 -2
  266. package/dashboard/dist/assets/{SwimlaneTimeline-De48aJan.js.map → SwimlaneTimeline-BDVQEaMw.js.map} +1 -1
  267. package/dashboard/dist/assets/{TagInput-S7UuVT_M.js → TagInput-DjPUDp2M.js} +2 -2
  268. package/dashboard/dist/assets/{TagInput-S7UuVT_M.js.map → TagInput-DjPUDp2M.js.map} +1 -1
  269. package/dashboard/dist/assets/{TaskDetailPage-HycMx3O9.js → TaskDetailPage-BOlv3iGB.js} +2 -2
  270. package/dashboard/dist/assets/{TaskDetailPage-HycMx3O9.js.map → TaskDetailPage-BOlv3iGB.js.map} +1 -1
  271. package/dashboard/dist/assets/{TaskQueuePill-BlHNpYiZ.js → TaskQueuePill-D-4Ynf3K.js} +2 -2
  272. package/dashboard/dist/assets/{TaskQueuePill-BlHNpYiZ.js.map → TaskQueuePill-D-4Ynf3K.js.map} +1 -1
  273. package/dashboard/dist/assets/{TasksListPage-OIcFFp1C.js → TasksListPage-e2teY0bD.js} +2 -2
  274. package/dashboard/dist/assets/{TasksListPage-OIcFFp1C.js.map → TasksListPage-e2teY0bD.js.map} +1 -1
  275. package/dashboard/dist/assets/{TimeAgo-OTC_55oZ.js → TimeAgo-Cvkpf_b3.js} +2 -2
  276. package/dashboard/dist/assets/{TimeAgo-OTC_55oZ.js.map → TimeAgo-Cvkpf_b3.js.map} +1 -1
  277. package/dashboard/dist/assets/{TimestampCell-CAwIj_AI.js → TimestampCell-B3btAV0N.js} +2 -2
  278. package/dashboard/dist/assets/{TimestampCell-CAwIj_AI.js.map → TimestampCell-B3btAV0N.js.map} +1 -1
  279. package/dashboard/dist/assets/{ToolPill-D40uLM_v.js → ToolPill-GsKQ80CO.js} +2 -2
  280. package/dashboard/dist/assets/{ToolPill-D40uLM_v.js.map → ToolPill-GsKQ80CO.js.map} +1 -1
  281. package/dashboard/dist/assets/{ToolTestPanel-8Vf6pfw4.js → ToolTestPanel-B03nebR7.js} +2 -2
  282. package/dashboard/dist/assets/{ToolTestPanel-8Vf6pfw4.js.map → ToolTestPanel-B03nebR7.js.map} +1 -1
  283. package/dashboard/dist/assets/{TopicDetailPage-iZW8rK9L.js → TopicDetailPage-DBRWne3O.js} +3 -3
  284. package/dashboard/dist/assets/{TopicDetailPage-iZW8rK9L.js.map → TopicDetailPage-DBRWne3O.js.map} +1 -1
  285. package/dashboard/dist/assets/{TopicsPage-CqiEcj-W.js → TopicsPage-CVe2M9HD.js} +2 -2
  286. package/dashboard/dist/assets/{TopicsPage-CqiEcj-W.js.map → TopicsPage-CVe2M9HD.js.map} +1 -1
  287. package/dashboard/dist/assets/{UserName-DQFjuoib.js → UserName-B_q_qp6V.js} +2 -2
  288. package/dashboard/dist/assets/{UserName-DQFjuoib.js.map → UserName-B_q_qp6V.js.map} +1 -1
  289. package/dashboard/dist/assets/WorkflowExecutionPage-Bh_dr9tM.js +2 -0
  290. package/dashboard/dist/assets/{WorkflowExecutionPage-Di08wCbs.js.map → WorkflowExecutionPage-Bh_dr9tM.js.map} +1 -1
  291. package/dashboard/dist/assets/{WorkflowPill-DJLcK_CM.js → WorkflowPill-D7244fKp.js} +2 -2
  292. package/dashboard/dist/assets/{WorkflowPill-DJLcK_CM.js.map → WorkflowPill-D7244fKp.js.map} +1 -1
  293. package/dashboard/dist/assets/{WorkflowsDashboard-Bb8HlrTJ.js → WorkflowsDashboard-DA6Mj7qH.js} +2 -2
  294. package/dashboard/dist/assets/{WorkflowsDashboard-Bb8HlrTJ.js.map → WorkflowsDashboard-DA6Mj7qH.js.map} +1 -1
  295. package/dashboard/dist/assets/{WorkflowsOverview-Dta1kurk.js → WorkflowsOverview-B1kBLj-a.js} +2 -2
  296. package/dashboard/dist/assets/{WorkflowsOverview-Dta1kurk.js.map → WorkflowsOverview-B1kBLj-a.js.map} +1 -1
  297. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CfAajg68.js → YamlWorkflowDetailPage-6GJM8QIX.js} +8 -8
  298. package/dashboard/dist/assets/{YamlWorkflowDetailPage-CfAajg68.js.map → YamlWorkflowDetailPage-6GJM8QIX.js.map} +1 -1
  299. package/dashboard/dist/assets/{YamlWorkflowsPage-CQFUzT4t.js → YamlWorkflowsPage-Bu811C7f.js} +2 -2
  300. package/dashboard/dist/assets/{YamlWorkflowsPage-CQFUzT4t.js.map → YamlWorkflowsPage-Bu811C7f.js.map} +1 -1
  301. package/dashboard/dist/assets/{agents-PuftRTB2.js → agents-MPk_GnYz.js} +2 -2
  302. package/dashboard/dist/assets/{agents-PuftRTB2.js.map → agents-MPk_GnYz.js.map} +1 -1
  303. package/dashboard/dist/assets/{bots-BmEiPAWY.js → bots-2RihE2Tc.js} +2 -2
  304. package/dashboard/dist/assets/{bots-BmEiPAWY.js.map → bots-2RihE2Tc.js.map} +1 -1
  305. package/dashboard/dist/assets/{capabilities-CRii4Soa.js → capabilities-CC4iwJ1P.js} +2 -2
  306. package/dashboard/dist/assets/{capabilities-CRii4Soa.js.map → capabilities-CC4iwJ1P.js.map} +1 -1
  307. package/dashboard/dist/assets/{controlplane-DO_czaYo.js → controlplane-Bmkic8BH.js} +2 -2
  308. package/dashboard/dist/assets/{controlplane-DO_czaYo.js.map → controlplane-Bmkic8BH.js.map} +1 -1
  309. package/dashboard/dist/assets/{escalation-columns-CzCquCPh.js → escalation-columns-B0lhUUrQ.js} +2 -2
  310. package/dashboard/dist/assets/{escalation-columns-CzCquCPh.js.map → escalation-columns-B0lhUUrQ.js.map} +1 -1
  311. package/dashboard/dist/assets/{escalation-items-Cy0ZgJqV.js → escalation-items-7WFpPo46.js} +2 -2
  312. package/dashboard/dist/assets/{escalation-items-Cy0ZgJqV.js.map → escalation-items-7WFpPo46.js.map} +1 -1
  313. package/dashboard/dist/assets/index-B9uv-euR.css +1 -0
  314. package/dashboard/dist/assets/{index-DhSCCpqM.js → index-B_XV1rwu.js} +2 -2
  315. package/dashboard/dist/assets/{index-DhSCCpqM.js.map → index-B_XV1rwu.js.map} +1 -1
  316. package/dashboard/dist/assets/{index-Cx8xb-oU.js → index-C2CLfGwL.js} +2 -2
  317. package/dashboard/dist/assets/{index-Cx8xb-oU.js.map → index-C2CLfGwL.js.map} +1 -1
  318. package/dashboard/dist/assets/{index-Cga5IW3D.js → index-C3AeFihz.js} +2 -2
  319. package/dashboard/dist/assets/{index-Cga5IW3D.js.map → index-C3AeFihz.js.map} +1 -1
  320. package/dashboard/dist/assets/{index-DiaRlFYI.js → index-CBri8fYM.js} +2 -2
  321. package/dashboard/dist/assets/{index-DiaRlFYI.js.map → index-CBri8fYM.js.map} +1 -1
  322. package/dashboard/dist/assets/{index-CL_1VpGb.js → index-CRWsB7ZC.js} +2 -2
  323. package/dashboard/dist/assets/{index-CL_1VpGb.js.map → index-CRWsB7ZC.js.map} +1 -1
  324. package/dashboard/dist/assets/{index-XntldBd0.js → index-CTOv3G7a.js} +2 -2
  325. package/dashboard/dist/assets/{index-XntldBd0.js.map → index-CTOv3G7a.js.map} +1 -1
  326. package/dashboard/dist/assets/{index-CfP2nKRc.js → index-CcArGkzI.js} +3 -3
  327. package/dashboard/dist/assets/{index-CfP2nKRc.js.map → index-CcArGkzI.js.map} +1 -1
  328. package/dashboard/dist/assets/{index-Dz6R8-Dw.js → index-CkMHS-hG.js} +25 -25
  329. package/dashboard/dist/assets/index-CkMHS-hG.js.map +1 -0
  330. package/dashboard/dist/assets/index-CmsmwCyv.js +2 -0
  331. package/dashboard/dist/assets/{index-4YaDUcKd.js.map → index-CmsmwCyv.js.map} +1 -1
  332. package/dashboard/dist/assets/{index-2SM2_onB.js → index-CvJsvqIc.js} +2 -2
  333. package/dashboard/dist/assets/{index-2SM2_onB.js.map → index-CvJsvqIc.js.map} +1 -1
  334. package/dashboard/dist/assets/{index-Rwqrflm-.js → index-D-ilRyfy.js} +2 -2
  335. package/dashboard/dist/assets/{index-Rwqrflm-.js.map → index-D-ilRyfy.js.map} +1 -1
  336. package/dashboard/dist/assets/{index-CZ7A3AcD.js → index-DSUtfDXx.js} +2 -2
  337. package/dashboard/dist/assets/{index-CZ7A3AcD.js.map → index-DSUtfDXx.js.map} +1 -1
  338. package/dashboard/dist/assets/{index-jL2K6us4.js → index-Da6ycKyf.js} +2 -2
  339. package/dashboard/dist/assets/{index-jL2K6us4.js.map → index-Da6ycKyf.js.map} +1 -1
  340. package/dashboard/dist/assets/{knowledge-CeUqGPuo.js → knowledge-Bpbg20DC.js} +2 -2
  341. package/dashboard/dist/assets/{knowledge-CeUqGPuo.js.map → knowledge-Bpbg20DC.js.map} +1 -1
  342. package/dashboard/dist/assets/machines-BqOZZU-3.js +2 -0
  343. package/dashboard/dist/assets/machines-BqOZZU-3.js.map +1 -0
  344. package/dashboard/dist/assets/{mcp-Cx96NTeD.js → mcp-CmcUXYce.js} +2 -2
  345. package/dashboard/dist/assets/{mcp-Cx96NTeD.js.map → mcp-CmcUXYce.js.map} +1 -1
  346. package/dashboard/dist/assets/{mcp-query-XAzWl0gm.js → mcp-query-C8buQxN9.js} +2 -2
  347. package/dashboard/dist/assets/{mcp-query-XAzWl0gm.js.map → mcp-query-C8buQxN9.js.map} +1 -1
  348. package/dashboard/dist/assets/{personas--4kjwyOw.js → personas-C2n5oDmY.js} +2 -2
  349. package/dashboard/dist/assets/{personas--4kjwyOw.js.map → personas-C2n5oDmY.js.map} +1 -1
  350. package/dashboard/dist/assets/{pipelines-PgkwvG7f.js → pipelines-RKpSkFz7.js} +2 -2
  351. package/dashboard/dist/assets/{pipelines-PgkwvG7f.js.map → pipelines-RKpSkFz7.js.map} +1 -1
  352. package/dashboard/dist/assets/{tasks-CcYxdBa3.js → tasks-Dab4hExW.js} +2 -2
  353. package/dashboard/dist/assets/{tasks-CcYxdBa3.js.map → tasks-Dab4hExW.js.map} +1 -1
  354. package/dashboard/dist/assets/{topics-_lik7cNY.js → topics-FTMNP7r3.js} +2 -2
  355. package/dashboard/dist/assets/{topics-_lik7cNY.js.map → topics-FTMNP7r3.js.map} +1 -1
  356. package/dashboard/dist/assets/{useDebouncedValue-Bm_AoxVx.js → useDebouncedValue-B_1u1YIk.js} +2 -2
  357. package/dashboard/dist/assets/{useDebouncedValue-Bm_AoxVx.js.map → useDebouncedValue-B_1u1YIk.js.map} +1 -1
  358. package/dashboard/dist/assets/{useNamespace-DgXXKdx5.js → useNamespace-HUeAI7Qb.js} +2 -2
  359. package/dashboard/dist/assets/{useNamespace-DgXXKdx5.js.map → useNamespace-HUeAI7Qb.js.map} +1 -1
  360. package/dashboard/dist/assets/{useYamlActivityEvents-Dj2qtGSd.js → useYamlActivityEvents-Cax54qHH.js} +2 -2
  361. package/dashboard/dist/assets/{useYamlActivityEvents-Dj2qtGSd.js.map → useYamlActivityEvents-Cax54qHH.js.map} +1 -1
  362. package/dashboard/dist/assets/{validate-FlXCBBT6.js → validate-DxOaV7QS.js} +2 -2
  363. package/dashboard/dist/assets/{validate-FlXCBBT6.js.map → validate-DxOaV7QS.js.map} +1 -1
  364. package/dashboard/dist/assets/{vendor-icons-DUYcKTjP.js → vendor-icons-fxBvvHBi.js} +187 -182
  365. package/dashboard/dist/assets/vendor-icons-fxBvvHBi.js.map +1 -0
  366. package/dashboard/dist/assets/{yaml-workflows-B0_JxRYQ.js → yaml-workflows-BgY1XHJx.js} +2 -2
  367. package/dashboard/dist/assets/{yaml-workflows-B0_JxRYQ.js.map → yaml-workflows-BgY1XHJx.js.map} +1 -1
  368. package/dashboard/dist/index.html +3 -3
  369. package/docs/architecture.md +1 -0
  370. package/docs/code-owned-configuration.md +6 -0
  371. package/docs/dashboard.md +2 -1
  372. package/docs/events.md +34 -1
  373. package/docs/hitl/lookups.md +6 -4
  374. package/docs/machines.md +114 -28
  375. package/docs/mcp.md +19 -0
  376. package/package.json +1 -1
  377. package/dashboard/dist/assets/AgentsPage-C9UuUKhr.js +0 -2
  378. package/dashboard/dist/assets/AvailableEscalationsPage-DrvfXz70.js +0 -2
  379. package/dashboard/dist/assets/FilterBar-BygWrnB1.js +0 -2
  380. package/dashboard/dist/assets/FilterBar-BygWrnB1.js.map +0 -1
  381. package/dashboard/dist/assets/McpRunDetailPage-80fQn9iX.js +0 -2
  382. package/dashboard/dist/assets/WorkflowExecutionPage-Di08wCbs.js +0 -2
  383. package/dashboard/dist/assets/index-4YaDUcKd.js +0 -2
  384. package/dashboard/dist/assets/index-CnU7Jjz3.css +0 -1
  385. package/dashboard/dist/assets/index-Dz6R8-Dw.js.map +0 -1
  386. package/dashboard/dist/assets/vendor-icons-DUYcKTjP.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{j as d}from"./vendor-query-DvWWuNIB.js";import{b0 as M,bg as C,g as F}from"./index-Dz6R8-Dw.js";import{U as H}from"./UserName-DQFjuoib.js";const $={LINK:"link",ESCALATION:"escalation",ESCALATION_LIST:"escalation-list",INVOKE:"invoke",ROSTER:"roster"},G=new Set(Object.values($));function U(t){return typeof t=="string"&&G.has(t)}function Y(t){return U(t==null?void 0:t["x-lt-widget"])}const w=new Set(["__proto__","constructor","prototype"]);function O(t){const n=[];for(const r of t.split(".")){const e=r.match(/^([^[\]]*)((?:\[\d+\])*)$/);if(!e)throw new Error(`invalid x-lt-bind path segment: "${r}"`);const[,s,i]=e;if(s){if(w.has(s))throw new Error(`x-lt-bind path may not target "${s}"`);n.push({key:s})}for(const o of i.match(/\d+/g)??[])n.push({index:Number(o)})}if(n.length===0)throw new Error(`empty x-lt-bind path: "${t}"`);return n}function B(t,n,r){const e=O(n);let s=t;for(let o=0;o<e.length-1;o++){const a=e[o],l=e[o+1],c="key"in a?a.key:a.index,u="index"in l;(s[c]==null||typeof s[c]!="object")&&(s[c]=u?[]:{}),s=s[c]}const i=e[e.length-1];s["key"in i?i.key:i.index]=r}function m(t,n){let r=t;for(const e of O(n)){if(r==null||typeof r!="object")return;r=r["key"in e?e.key:e.index]}return r}function k(t,n){const r=n==null?void 0:n["x-lt-bind"];return typeof r=="string"&&r.length>0?r:t}function v(t,n){const r=n==null?void 0:n.properties;if(!r)return{...t};const e={};for(const[s,i]of Object.entries(r))s in t&&(Y(i)||B(e,k(s,i),t[s]));return e}function tt(t,n){const r=n==null?void 0:n.properties;if(!r)return t?{...t}:{};const e={};for(const[s,i]of Object.entries(r)){const o=m(t,k(s,i));o!==void 0&&(e[s]=o)}return e}const R=["escalation","metadata","envelope","payload","resolver","lookup","input","roster"],K=/\{\{\s*([^{}]+?)\s*\}\}/g,p="—";function A(t){if(t==null)return p;if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch{return p}}function S(t,n){return t.replace(K,(r,e)=>{const s=e.indexOf("."),i=s===-1?e:e.slice(0,s);if(!R.includes(i))return p;const o=n[i];if(s===-1)return A(o);try{return A(m(o,e.slice(s+1)))}catch{return p}})}function P(t){const n=t==null?void 0:t["x-lt-help"];if(typeof n=="string"&&n.trim().length>0)return n;const r=t==null?void 0:t["x-lt-context"];return typeof r=="string"&&r.trim().length>0?r:null}function nt(t,n){const r=P(t);return r?S(r,n):null}function rt({isTerminal:t,status:n,claimed:r,claimedByMe:e}){return t?n==="cancelled"?"This escalation was cancelled. The record is shown for reference.":"This escalation has been resolved. The submitted form is shown for reference.":e?"You have claimed this escalation. Fill out the form and submit to resolve it.":r?"Another user has claimed this escalation. It unlocks if their claim expires or is released.":"Claim this escalation to enable the form."}const E=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/,_="—",y={AGE:"age",AGO:"ago",DATE:"date",USER:"user"};function h(t){return t===y.AGE||t===y.AGO}function et({raw:t,format:n}){if(!t||t===_)return d.jsx("span",{className:"text-text-quaternary",children:_});if(n===y.USER)return d.jsx(H,{userId:t,className:"block truncate"});const r=E.test(t)||!Number.isNaN(new Date(t).getTime())&&(h(n)||n===y.DATE);return h(n)&&r?d.jsx("span",{title:C(t),className:"tabular-nums whitespace-nowrap",children:M(t)}):r&&(n===y.DATE||E.test(t))?d.jsx(F,{date:t,format:"datetime",className:"text-text-primary whitespace-nowrap"}):d.jsx(d.Fragment,{children:t})}function st(t){if(!t)return!1;try{const n=JSON.stringify(t);return n.includes("envelope.")||n.includes("payload.")}catch{return!1}}const V="accumulate_items",J="accumulate_max",T="batch_items",x="batch_filled_at",I="batch_filled_by",W="batch_keys",q="batch_pending";function f(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function N(t,n){return t.at.localeCompare(n.at)||t.itemKey.localeCompare(n.itemKey)}function it(t,n){const r=t.metadata??{},e=n==null?void 0:n[V];if(f(e)){const i=Object.entries(e).map(([a,l])=>{const c=f(l)?l:{};return{itemKey:a,at:typeof c.at=="string"?c.at:"",...f(c.payload)?{payload:c.payload}:{},...typeof c.actor=="string"?{actor:c.actor}:{},...typeof c.reciprocalId=="string"?{reciprocalId:c.reciprocalId}:{}}}).sort(N),o=r[J];return{kind:"accumulate",count:i.length,max:typeof o=="number"?o:null,items:i,pending:[]}}const s=r[q];if(Array.isArray(s)){const i=f(n==null?void 0:n[T])?n[T]:{},o=f(n==null?void 0:n[x])?n[x]:{},a=f(n==null?void 0:n[I])?n[I]:{},l=Object.entries(i).map(([u,b])=>({itemKey:u,at:typeof o[u]=="string"?o[u]:"",...f(b)?{payload:b}:{},...typeof a[u]=="string"?{actor:a[u]}:{}})).sort(N),c=r[W];return{kind:"batch",count:l.length,max:Array.isArray(c)?c.length:null,items:l,pending:s.filter(u=>typeof u=="string")}}return null}function ot(t){if(!t)return"";const n=Object.entries(t).slice(0,3).map(([e,s])=>{const i=typeof s=="object"&&s!==null?JSON.stringify(s):String(s);return`${e}: ${i.length>24?`${i.slice(0,23)}…`:i}`}),r=Object.keys(t).length-n.length;return r>0?`${n.join(" · ")} · +${r}`:n.join(" · ")}const ct="x-lt-item-label",j=/\{\{\s*([^{}]+?)\s*\}\}/g,D="item",g="—";function z(t){if(t==null||t==="")return null;if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch{return null}}function L(t,n,r){const e=t.indexOf(".");if((e===-1?t:t.slice(0,e))===D)try{return z(e===-1?n:m(n,t.slice(e+1)))}catch{return null}const i=S(`{{${t}}}`,r);return i===g?null:i}function at(t,n,r={}){if(typeof t!="string"||!t.trim())return null;let e=0,s=0;const i=t.replace(j,(o,a)=>{s+=1;const l=L(a,n,r);return l===null?g:(e+=1,l)}).trim();return s>0&&e===0?null:i||null}function lt(t,n,r={}){return t.replace(j,(e,s)=>!n&&s.split(".")[0]===D?g:L(s,n??{},r)??g)}export{_ as E,et as F,R as H,ct as I,S as a,nt as b,v as c,rt as d,it as e,st as f,m as g,U as h,at as i,lt as j,h as k,tt as m,ot as s};
2
- //# sourceMappingURL=escalation-items-Cy0ZgJqV.js.map
1
+ import{j as d}from"./vendor-query-DvWWuNIB.js";import{b0 as M,bg as C,g as F}from"./index-CkMHS-hG.js";import{U as H}from"./UserName-B_q_qp6V.js";const $={LINK:"link",ESCALATION:"escalation",ESCALATION_LIST:"escalation-list",INVOKE:"invoke",ROSTER:"roster"},G=new Set(Object.values($));function U(t){return typeof t=="string"&&G.has(t)}function Y(t){return U(t==null?void 0:t["x-lt-widget"])}const w=new Set(["__proto__","constructor","prototype"]);function O(t){const n=[];for(const r of t.split(".")){const e=r.match(/^([^[\]]*)((?:\[\d+\])*)$/);if(!e)throw new Error(`invalid x-lt-bind path segment: "${r}"`);const[,s,i]=e;if(s){if(w.has(s))throw new Error(`x-lt-bind path may not target "${s}"`);n.push({key:s})}for(const o of i.match(/\d+/g)??[])n.push({index:Number(o)})}if(n.length===0)throw new Error(`empty x-lt-bind path: "${t}"`);return n}function B(t,n,r){const e=O(n);let s=t;for(let o=0;o<e.length-1;o++){const a=e[o],l=e[o+1],c="key"in a?a.key:a.index,u="index"in l;(s[c]==null||typeof s[c]!="object")&&(s[c]=u?[]:{}),s=s[c]}const i=e[e.length-1];s["key"in i?i.key:i.index]=r}function m(t,n){let r=t;for(const e of O(n)){if(r==null||typeof r!="object")return;r=r["key"in e?e.key:e.index]}return r}function k(t,n){const r=n==null?void 0:n["x-lt-bind"];return typeof r=="string"&&r.length>0?r:t}function v(t,n){const r=n==null?void 0:n.properties;if(!r)return{...t};const e={};for(const[s,i]of Object.entries(r))s in t&&(Y(i)||B(e,k(s,i),t[s]));return e}function tt(t,n){const r=n==null?void 0:n.properties;if(!r)return t?{...t}:{};const e={};for(const[s,i]of Object.entries(r)){const o=m(t,k(s,i));o!==void 0&&(e[s]=o)}return e}const R=["escalation","metadata","envelope","payload","resolver","lookup","input","roster"],K=/\{\{\s*([^{}]+?)\s*\}\}/g,p="—";function A(t){if(t==null)return p;if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch{return p}}function S(t,n){return t.replace(K,(r,e)=>{const s=e.indexOf("."),i=s===-1?e:e.slice(0,s);if(!R.includes(i))return p;const o=n[i];if(s===-1)return A(o);try{return A(m(o,e.slice(s+1)))}catch{return p}})}function P(t){const n=t==null?void 0:t["x-lt-help"];if(typeof n=="string"&&n.trim().length>0)return n;const r=t==null?void 0:t["x-lt-context"];return typeof r=="string"&&r.trim().length>0?r:null}function nt(t,n){const r=P(t);return r?S(r,n):null}function rt({isTerminal:t,status:n,claimed:r,claimedByMe:e}){return t?n==="cancelled"?"This escalation was cancelled. The record is shown for reference.":"This escalation has been resolved. The submitted form is shown for reference.":e?"You have claimed this escalation. Fill out the form and submit to resolve it.":r?"Another user has claimed this escalation. It unlocks if their claim expires or is released.":"Claim this escalation to enable the form."}const E=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/,_="—",y={AGE:"age",AGO:"ago",DATE:"date",USER:"user"};function h(t){return t===y.AGE||t===y.AGO}function et({raw:t,format:n}){if(!t||t===_)return d.jsx("span",{className:"text-text-quaternary",children:_});if(n===y.USER)return d.jsx(H,{userId:t,className:"block truncate"});const r=E.test(t)||!Number.isNaN(new Date(t).getTime())&&(h(n)||n===y.DATE);return h(n)&&r?d.jsx("span",{title:C(t),className:"tabular-nums whitespace-nowrap",children:M(t)}):r&&(n===y.DATE||E.test(t))?d.jsx(F,{date:t,format:"datetime",className:"text-text-primary whitespace-nowrap"}):d.jsx(d.Fragment,{children:t})}function st(t){if(!t)return!1;try{const n=JSON.stringify(t);return n.includes("envelope.")||n.includes("payload.")}catch{return!1}}const V="accumulate_items",J="accumulate_max",T="batch_items",x="batch_filled_at",I="batch_filled_by",W="batch_keys",q="batch_pending";function f(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function N(t,n){return t.at.localeCompare(n.at)||t.itemKey.localeCompare(n.itemKey)}function it(t,n){const r=t.metadata??{},e=n==null?void 0:n[V];if(f(e)){const i=Object.entries(e).map(([a,l])=>{const c=f(l)?l:{};return{itemKey:a,at:typeof c.at=="string"?c.at:"",...f(c.payload)?{payload:c.payload}:{},...typeof c.actor=="string"?{actor:c.actor}:{},...typeof c.reciprocalId=="string"?{reciprocalId:c.reciprocalId}:{}}}).sort(N),o=r[J];return{kind:"accumulate",count:i.length,max:typeof o=="number"?o:null,items:i,pending:[]}}const s=r[q];if(Array.isArray(s)){const i=f(n==null?void 0:n[T])?n[T]:{},o=f(n==null?void 0:n[x])?n[x]:{},a=f(n==null?void 0:n[I])?n[I]:{},l=Object.entries(i).map(([u,b])=>({itemKey:u,at:typeof o[u]=="string"?o[u]:"",...f(b)?{payload:b}:{},...typeof a[u]=="string"?{actor:a[u]}:{}})).sort(N),c=r[W];return{kind:"batch",count:l.length,max:Array.isArray(c)?c.length:null,items:l,pending:s.filter(u=>typeof u=="string")}}return null}function ot(t){if(!t)return"";const n=Object.entries(t).slice(0,3).map(([e,s])=>{const i=typeof s=="object"&&s!==null?JSON.stringify(s):String(s);return`${e}: ${i.length>24?`${i.slice(0,23)}…`:i}`}),r=Object.keys(t).length-n.length;return r>0?`${n.join(" · ")} · +${r}`:n.join(" · ")}const ct="x-lt-item-label",j=/\{\{\s*([^{}]+?)\s*\}\}/g,D="item",g="—";function z(t){if(t==null||t==="")return null;if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch{return null}}function L(t,n,r){const e=t.indexOf(".");if((e===-1?t:t.slice(0,e))===D)try{return z(e===-1?n:m(n,t.slice(e+1)))}catch{return null}const i=S(`{{${t}}}`,r);return i===g?null:i}function at(t,n,r={}){if(typeof t!="string"||!t.trim())return null;let e=0,s=0;const i=t.replace(j,(o,a)=>{s+=1;const l=L(a,n,r);return l===null?g:(e+=1,l)}).trim();return s>0&&e===0?null:i||null}function lt(t,n,r={}){return t.replace(j,(e,s)=>!n&&s.split(".")[0]===D?g:L(s,n??{},r)??g)}export{_ as E,et as F,R as H,ct as I,S as a,nt as b,v as c,rt as d,it as e,st as f,m as g,U as h,at as i,lt as j,h as k,tt as m,ot as s};
2
+ //# sourceMappingURL=escalation-items-7WFpPo46.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"escalation-items-Cy0ZgJqV.js","sources":["../../../shared/form-validation/display-only-widgets.ts","../../../shared/form-validation/x-lt-bind.ts","../../../shared/form-validation/x-lt-help.ts","../../src/components/common/display/FormattedValue.tsx","../../src/lib/schema-needs-envelope.ts","../../src/lib/escalation-items.ts"],"sourcesContent":["/**\n * Widgets that render from the escalation context and produce no answer of\n * their own: navigation links, embedded records and lists, and invoke\n * controls. Their form slot exists only to place them in the layout, so\n * the payload mapper drops them and the server never sees a value.\n */\nexport const DISPLAY_ONLY_WIDGET_NAMES = {\n LINK: 'link',\n ESCALATION: 'escalation',\n ESCALATION_LIST: 'escalation-list',\n INVOKE: 'invoke',\n ROSTER: 'roster',\n} as const;\n\nexport const DISPLAY_ONLY_WIDGETS: ReadonlySet<string> = new Set(Object.values(DISPLAY_ONLY_WIDGET_NAMES));\n\nexport function isDisplayOnlyWidget(name: unknown): boolean {\n return typeof name === 'string' && DISPLAY_ONLY_WIDGETS.has(name);\n}\n\n/** Whether a property definition renders a display-only widget. */\nexport function isDisplayOnlyField(def: Record<string, unknown> | null | undefined): boolean {\n return isDisplayOnlyWidget(def?.['x-lt-widget']);\n}\n","/**\n * x-lt-bind — maps the escalation FORM (flat field values the user edits) to and\n * from the PAYLOAD (the nested JSON the workflow consumes). A form_schema property\n * may declare `x-lt-bind: \"a.b[0].c\"`, the path its value occupies in the payload;\n * a property with no bind sits at its own name at the root (1:1). This module is\n * isomorphic — the dashboard renders forms with it, and the API layer inverts a\n * submitted payload through it to validate against the form contract. One\n * implementation, both sides.\n *\n * mapPayloadToForm — payload → flat form values, to PREFILL/display the form\n * (server-side: to validate a submitted payload)\n * mapFormToPayload — flat form values → payload, the shape submitted/stored\n */\nimport { isDisplayOnlyField } from './display-only-widgets';\n\ntype PathSeg = { key: string } | { index: number };\n\nconst BLOCKED_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n/** Parse a bind path — dot keys with optional `[n]` indices. Rejects pollution keys. */\nexport function parsePath(path: string): PathSeg[] {\n const segs: PathSeg[] = [];\n for (const raw of path.split('.')) {\n const m = raw.match(/^([^[\\]]*)((?:\\[\\d+\\])*)$/);\n if (!m) throw new Error(`invalid x-lt-bind path segment: \"${raw}\"`);\n const [, name, brackets] = m;\n if (name) {\n if (BLOCKED_KEYS.has(name)) throw new Error(`x-lt-bind path may not target \"${name}\"`);\n segs.push({ key: name });\n }\n for (const b of brackets.match(/\\d+/g) ?? []) segs.push({ index: Number(b) });\n }\n if (segs.length === 0) throw new Error(`empty x-lt-bind path: \"${path}\"`);\n return segs;\n}\n\n/** Set `value` at `path` inside `root`, creating intermediate objects/arrays. */\nexport function setDeep(root: Record<string, any>, path: string, value: unknown): void {\n const segs = parsePath(path);\n let node: any = root;\n for (let i = 0; i < segs.length - 1; i++) {\n const seg = segs[i];\n const next = segs[i + 1];\n const childKey = 'key' in seg ? seg.key : seg.index;\n const wantArray = 'index' in next;\n if (node[childKey] == null || typeof node[childKey] !== 'object') {\n node[childKey] = wantArray ? [] : {};\n }\n node = node[childKey];\n }\n const last = segs[segs.length - 1];\n node['key' in last ? last.key : last.index] = value;\n}\n\n/** Read the value at `path` inside `root` (undefined if any segment is missing). */\nexport function getDeep(root: unknown, path: string): unknown {\n let node: any = root;\n for (const seg of parsePath(path)) {\n if (node == null || typeof node !== 'object') return undefined;\n node = node['key' in seg ? seg.key : seg.index];\n }\n return node;\n}\n\n/** The bind path for a form property (its `x-lt-bind`, or the property name). */\nexport function bindPathFor(propName: string, propDef: Record<string, any> | undefined): string {\n const bind = propDef?.['x-lt-bind'];\n return typeof bind === 'string' && bind.length > 0 ? bind : propName;\n}\n\n/**\n * Assemble the payload from the form's flat values. A field absent from\n * `formValues` is omitted (so clearing/deleting a field drops it from the\n * payload). Unknown keys not declared in the schema are dropped, and so are\n * display-only widget fields, which carry no answer. With no schema\n * properties, values pass through unchanged.\n */\nexport function mapFormToPayload(\n formValues: Record<string, any>,\n formSchema: Record<string, any> | null | undefined,\n): Record<string, any> {\n const props = formSchema?.properties as Record<string, any> | undefined;\n if (!props) return { ...formValues };\n const payload: Record<string, any> = {};\n for (const [name, def] of Object.entries(props)) {\n if (!(name in formValues)) continue;\n if (isDisplayOnlyField(def as Record<string, unknown>)) continue;\n setDeep(payload, bindPathFor(name, def as Record<string, any>), formValues[name]);\n }\n return payload;\n}\n\n/**\n * Reverse of {@link mapFormToPayload}: pull each form field's value out of the\n * payload via its bind path, to prefill/display the form. A field whose bound\n * path is missing from the payload is omitted (the caller falls back to the\n * schema default).\n */\nexport function mapPayloadToForm(\n payload: Record<string, any> | null | undefined,\n formSchema: Record<string, any> | null | undefined,\n): Record<string, any> {\n const props = formSchema?.properties as Record<string, any> | undefined;\n if (!props) return payload ? { ...payload } : {};\n const form: Record<string, any> = {};\n for (const [name, def] of Object.entries(props)) {\n const v = getDeep(payload, bindPathFor(name, def as Record<string, any>));\n if (v !== undefined) form[name] = v;\n }\n return form;\n}\n","/**\n * x-lt-help — the form's guidance content, rendered in the side panel beside\n * the resolve form. A form_schema may declare schema-level `x-lt-help`: a\n * markdown string whose `{{domain.path}}` tokens interpolate values from the\n * escalation surface, so help text can reference the live record:\n *\n * {{escalation.role}} — any column on the escalation row\n * {{metadata.schema_version}} — the row's metadata dict\n * {{envelope.formDefaults.customer.name}} — the workflow-sent input envelope\n * {{payload.category}} — the escalation context payload\n * {{resolver.notes}} — the submitted resolver payload\n * {{lookup.materials.items}} — versioned knowledge lookups pinned on the row\n * {{roster.orders.outstanding}} (a roster field's counts, x-lt-roster.ts)\n *\n * Paths reuse the x-lt-bind syntax (`a.b[0].c`). A missing value renders as an\n * em dash. `x-lt-context` is accepted as the plain-text fallback source when\n * `x-lt-help` is absent.\n */\nimport { getDeep } from './x-lt-bind';\n\n/** The token domains a help template may reference. `input` is the invoke-form name for the live values `resolver` also carries. */\nexport const HELP_DOMAINS = ['escalation', 'metadata', 'envelope', 'payload', 'resolver', 'lookup', 'input', 'roster'] as const;\nexport type HelpDomain = (typeof HELP_DOMAINS)[number];\n\nexport type HelpTokenContext = Partial<Record<HelpDomain, Record<string, unknown> | null>>;\n\nconst TOKEN_PATTERN = /\\{\\{\\s*([^{}]+?)\\s*\\}\\}/g;\nconst MISSING_VALUE = '—';\n\nfunction formatTokenValue(value: unknown): string {\n if (value === undefined || value === null) return MISSING_VALUE;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return MISSING_VALUE;\n }\n}\n\n/** Replace every `{{domain.path}}` token with its value from the context. */\nexport function interpolateHelp(template: string, ctx: HelpTokenContext): string {\n return template.replace(TOKEN_PATTERN, (_match, rawPath: string) => {\n const dot = rawPath.indexOf('.');\n const domain = (dot === -1 ? rawPath : rawPath.slice(0, dot)) as HelpDomain;\n if (!HELP_DOMAINS.includes(domain)) return MISSING_VALUE;\n const root = ctx[domain];\n if (dot === -1) return formatTokenValue(root);\n try {\n return formatTokenValue(getDeep(root, rawPath.slice(dot + 1)));\n } catch {\n return MISSING_VALUE;\n }\n });\n}\n\n/** The schema's help source: `x-lt-help` first, `x-lt-context` as fallback. */\nexport function resolveHelpSource(schema: Record<string, unknown> | null | undefined): string | null {\n const help = schema?.['x-lt-help'];\n if (typeof help === 'string' && help.trim().length > 0) return help;\n const context = schema?.['x-lt-context'];\n if (typeof context === 'string' && context.trim().length > 0) return context;\n return null;\n}\n\n/** The schema's help content, interpolated. Null when the schema declares none. */\nexport function buildHelpMarkdown(\n schema: Record<string, unknown> | null | undefined,\n ctx: HelpTokenContext,\n): string | null {\n const source = resolveHelpSource(schema);\n return source ? interpolateHelp(source, ctx) : null;\n}\n\nexport interface HelpStateHint {\n isTerminal: boolean;\n status?: string;\n claimed: boolean;\n claimedByMe: boolean;\n}\n\n/**\n * State-aware guidance shown when the schema carries no help content — the\n * panel always tells the user what this page expects of them right now.\n */\nexport function defaultHelpMarkdown({ isTerminal, status, claimed, claimedByMe }: HelpStateHint): string {\n if (isTerminal) {\n return status === 'cancelled'\n ? 'This escalation was cancelled. The record is shown for reference.'\n : 'This escalation has been resolved. The submitted form is shown for reference.';\n }\n if (claimedByMe) return 'You have claimed this escalation. Fill out the form and submit to resolve it.';\n if (claimed) return 'Another user has claimed this escalation. It unlocks if their claim expires or is released.';\n return 'Claim this escalation to enable the form.';\n}\n","import { DateValue } from './DateValue';\nimport { UserName } from './UserName';\nimport { formatAgoCompact } from '../../../lib/format';\nimport { formatDisplayDateTime } from '../../../lib/display-zone';\n\nconst ISO_DATETIME = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\nexport const EM_DASH = '—';\n\n/** Value formats an author may name on a column, card field, or fact. `ago` is the spoken form of `age`. */\nexport const FIELD_FORMATS = {\n AGE: 'age',\n AGO: 'ago',\n DATE: 'date',\n USER: 'user',\n} as const;\n\n/** True when the format renders as an age that ages with the clock. */\nexport function isAgeFormat(format?: string): boolean {\n return format === FIELD_FORMATS.AGE || format === FIELD_FORMATS.AGO;\n}\n\n/**\n * Render a value with a little care: `age`/`ago` turns a timestamp into a\n * compact age (\"12m\", \"3h\") with the absolute time as its tooltip; `date`\n * renders the full date, hoverable, and so does any ISO datetime with no\n * format; `user` resolves a user id to a display name; an empty value a quiet\n * em dash; anything else plain text.\n */\nexport function FormattedValue({ raw, format }: { raw: string; format?: string }) {\n if (!raw || raw === EM_DASH) return <span className=\"text-text-quaternary\">{EM_DASH}</span>;\n if (format === FIELD_FORMATS.USER) return <UserName userId={raw} className=\"block truncate\" />;\n const isDate = ISO_DATETIME.test(raw) || !Number.isNaN(new Date(raw).getTime()) && (isAgeFormat(format) || format === FIELD_FORMATS.DATE);\n if (isAgeFormat(format) && isDate) {\n return <span title={formatDisplayDateTime(raw)} className=\"tabular-nums whitespace-nowrap\">{formatAgoCompact(raw)}</span>;\n }\n if (isDate && (format === FIELD_FORMATS.DATE || ISO_DATETIME.test(raw))) {\n return <DateValue date={raw} format=\"datetime\" className=\"text-text-primary whitespace-nowrap\" />;\n }\n return <>{raw}</>;\n}\n","/**\n * List rows arrive without the heavyweight `envelope`/`escalation_payload`\n * columns by default. A surface driven by an x-lt schema fragment opts back in\n * only when the fragment actually interpolates those domains — `envelope.` or\n * `payload.` in any token, condition, or source path. `metadata.` and\n * `resolver.` ride the slim rows and never trigger the opt-in.\n */\nexport function schemaNeedsEnvelope(fragment: unknown): boolean {\n if (!fragment) return false;\n try {\n const s = JSON.stringify(fragment);\n return s.includes('envelope.') || s.includes('payload.');\n } catch {\n return false;\n }\n}\n","import type { LTEscalationRecord } from '../api/types';\nimport { interpolateHelp, type HelpTokenContext } from './x-lt-help';\nimport { getDeep } from './x-lt-bind';\n\n/** One held item of an accumulator or batch row, in the shape the workflow receives. */\nexport interface EscalationItem {\n itemKey: string;\n payload?: Record<string, unknown>;\n /** ISO-8601 from the database clock; empty for a batch item with no stamp. */\n at: string;\n actor?: string;\n reciprocalId?: string;\n}\n\nexport interface EscalationItems {\n kind: 'accumulate' | 'batch';\n count: number;\n /** The count trigger (accumulate) or the declared size (batch); null when unbounded. */\n max: number | null;\n items: EscalationItem[];\n /** Batch only: declared keys still awaiting submission. */\n pending: string[];\n}\n\nconst ACCUMULATE_ITEMS = 'accumulate_items';\nconst ACCUMULATE_MAX = 'accumulate_max';\nconst BATCH_ITEMS = 'batch_items';\nconst BATCH_FILLED_AT = 'batch_filled_at';\nconst BATCH_FILLED_BY = 'batch_filled_by';\nconst BATCH_KEYS = 'batch_keys';\nconst BATCH_PENDING = 'batch_pending';\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nfunction byArrival(a: EscalationItem, b: EscalationItem): number {\n return a.at.localeCompare(b.at) || a.itemKey.localeCompare(b.itemKey);\n}\n\n/**\n * The held items of a row, or null when the row is neither an accumulator\n * nor a batch. Mirrors the server's items view so the panel and the API\n * agree on order (arrival, then key).\n */\nexport function escalationItems(\n esc: Pick<LTEscalationRecord, 'metadata'>,\n envelope: Record<string, unknown> | null,\n): EscalationItems | null {\n const metadata = (esc.metadata ?? {}) as Record<string, unknown>;\n const store = envelope?.[ACCUMULATE_ITEMS];\n if (isRecord(store)) {\n const items = Object.entries(store).map(([itemKey, entry]) => {\n const e = isRecord(entry) ? entry : {};\n return {\n itemKey,\n at: typeof e.at === 'string' ? e.at : '',\n ...(isRecord(e.payload) ? { payload: e.payload } : {}),\n ...(typeof e.actor === 'string' ? { actor: e.actor } : {}),\n ...(typeof e.reciprocalId === 'string' ? { reciprocalId: e.reciprocalId } : {}),\n } as EscalationItem;\n }).sort(byArrival);\n const max = metadata[ACCUMULATE_MAX];\n return { kind: 'accumulate', count: items.length, max: typeof max === 'number' ? max : null, items, pending: [] };\n }\n const pending = metadata[BATCH_PENDING];\n if (Array.isArray(pending)) {\n const filled = isRecord(envelope?.[BATCH_ITEMS]) ? (envelope![BATCH_ITEMS] as Record<string, unknown>) : {};\n const stamps = isRecord(envelope?.[BATCH_FILLED_AT]) ? (envelope![BATCH_FILLED_AT] as Record<string, unknown>) : {};\n const actors = isRecord(envelope?.[BATCH_FILLED_BY]) ? (envelope![BATCH_FILLED_BY] as Record<string, unknown>) : {};\n const items = Object.entries(filled).map(([itemKey, payload]) => ({\n itemKey,\n at: typeof stamps[itemKey] === 'string' ? (stamps[itemKey] as string) : '',\n ...(isRecord(payload) ? { payload } : {}),\n ...(typeof actors[itemKey] === 'string' ? { actor: actors[itemKey] as string } : {}),\n } as EscalationItem)).sort(byArrival);\n const keys = metadata[BATCH_KEYS];\n return {\n kind: 'batch',\n count: items.length,\n max: Array.isArray(keys) ? keys.length : null,\n items,\n pending: pending.filter((k): k is string => typeof k === 'string'),\n };\n }\n return null;\n}\n\n/** A one-line summary of an item payload for the list row. */\nexport function summarizePayload(payload: Record<string, unknown> | undefined): string {\n if (!payload) return '';\n const parts = Object.entries(payload).slice(0, 3).map(([k, v]) => {\n const text = typeof v === 'object' && v !== null ? JSON.stringify(v) : String(v);\n return `${k}: ${text.length > 24 ? `${text.slice(0, 23)}…` : text}`;\n });\n const more = Object.keys(payload).length - parts.length;\n return more > 0 ? `${parts.join(' · ')} · +${more}` : parts.join(' · ');\n}\n\n/** The container role's form-schema key naming how each held item displays. */\nexport const ITEM_LABEL_KEY = 'x-lt-item-label';\n\nconst TOKEN = /\\{\\{\\s*([^{}]+?)\\s*\\}\\}/g;\nconst ITEM_DOMAIN = 'item';\nconst MISSING = '—';\n\nfunction formatValue(value: unknown): string | null {\n if (value === undefined || value === null || value === '') return null;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return null;\n }\n}\n\n/** One token's value: `item.*` from the held item, every other domain as help tokens resolve it. */\nfunction tokenValue(path: string, item: EscalationItem, ctx: HelpTokenContext): string | null {\n const dot = path.indexOf('.');\n const domain = dot === -1 ? path : path.slice(0, dot);\n if (domain === ITEM_DOMAIN) {\n try {\n return formatValue(dot === -1 ? item : getDeep(item, path.slice(dot + 1)));\n } catch {\n return null;\n }\n }\n const value = interpolateHelp(`{{${path}}}`, ctx);\n return value === MISSING ? null : value;\n}\n\n/**\n * An item's display label from the role's `x-lt-item-label` template, whose\n * `{{item.*}}` tokens read the held item (itemKey, payload, actor, at) beside\n * the usual escalation domains. Null when there is no template or every token\n * it names is missing, so the caller falls back to the item key.\n */\nexport function itemLabel(\n template: unknown,\n item: EscalationItem,\n ctx: HelpTokenContext = {},\n): string | null {\n if (typeof template !== 'string' || !template.trim()) return null;\n let resolved = 0;\n let tokens = 0;\n const label = template.replace(TOKEN, (_match, rawPath: string) => {\n tokens += 1;\n const value = tokenValue(rawPath, item, ctx);\n if (value === null) return MISSING;\n resolved += 1;\n return value;\n }).trim();\n if (tokens > 0 && resolved === 0) return null;\n return label || null;\n}\n\n/** A template over `{{item.*}}` and the escalation domains; missing tokens read as an em dash. */\nexport function interpolateItemTemplate(template: string, item: EscalationItem | undefined, ctx: HelpTokenContext = {}): string {\n return template.replace(TOKEN, (_match, rawPath: string) => {\n if (!item && rawPath.split('.')[0] === ITEM_DOMAIN) return MISSING;\n return tokenValue(rawPath, item ?? ({} as EscalationItem), ctx) ?? MISSING;\n });\n}\n"],"names":["DISPLAY_ONLY_WIDGET_NAMES","DISPLAY_ONLY_WIDGETS","isDisplayOnlyWidget","name","isDisplayOnlyField","def","BLOCKED_KEYS","parsePath","path","segs","raw","m","brackets","b","setDeep","root","value","node","i","seg","next","childKey","wantArray","last","getDeep","bindPathFor","propName","propDef","bind","mapFormToPayload","formValues","formSchema","props","payload","mapPayloadToForm","form","v","HELP_DOMAINS","TOKEN_PATTERN","MISSING_VALUE","formatTokenValue","interpolateHelp","template","ctx","_match","rawPath","dot","domain","resolveHelpSource","schema","help","context","buildHelpMarkdown","source","defaultHelpMarkdown","isTerminal","status","claimed","claimedByMe","ISO_DATETIME","EM_DASH","FIELD_FORMATS","isAgeFormat","format","FormattedValue","jsx","UserName","isDate","formatDisplayDateTime","formatAgoCompact","DateValue","schemaNeedsEnvelope","fragment","s","ACCUMULATE_ITEMS","ACCUMULATE_MAX","BATCH_ITEMS","BATCH_FILLED_AT","BATCH_FILLED_BY","BATCH_KEYS","BATCH_PENDING","isRecord","byArrival","a","escalationItems","esc","envelope","metadata","store","items","itemKey","entry","e","max","pending","filled","stamps","actors","keys","k","summarizePayload","parts","text","more","ITEM_LABEL_KEY","TOKEN","ITEM_DOMAIN","MISSING","formatValue","tokenValue","item","itemLabel","resolved","tokens","label","interpolateItemTemplate"],"mappings":"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"}
1
+ {"version":3,"file":"escalation-items-7WFpPo46.js","sources":["../../../shared/form-validation/display-only-widgets.ts","../../../shared/form-validation/x-lt-bind.ts","../../../shared/form-validation/x-lt-help.ts","../../src/components/common/display/FormattedValue.tsx","../../src/lib/schema-needs-envelope.ts","../../src/lib/escalation-items.ts"],"sourcesContent":["/**\n * Widgets that render from the escalation context and produce no answer of\n * their own: navigation links, embedded records and lists, and invoke\n * controls. Their form slot exists only to place them in the layout, so\n * the payload mapper drops them and the server never sees a value.\n */\nexport const DISPLAY_ONLY_WIDGET_NAMES = {\n LINK: 'link',\n ESCALATION: 'escalation',\n ESCALATION_LIST: 'escalation-list',\n INVOKE: 'invoke',\n ROSTER: 'roster',\n} as const;\n\nexport const DISPLAY_ONLY_WIDGETS: ReadonlySet<string> = new Set(Object.values(DISPLAY_ONLY_WIDGET_NAMES));\n\nexport function isDisplayOnlyWidget(name: unknown): boolean {\n return typeof name === 'string' && DISPLAY_ONLY_WIDGETS.has(name);\n}\n\n/** Whether a property definition renders a display-only widget. */\nexport function isDisplayOnlyField(def: Record<string, unknown> | null | undefined): boolean {\n return isDisplayOnlyWidget(def?.['x-lt-widget']);\n}\n","/**\n * x-lt-bind — maps the escalation FORM (flat field values the user edits) to and\n * from the PAYLOAD (the nested JSON the workflow consumes). A form_schema property\n * may declare `x-lt-bind: \"a.b[0].c\"`, the path its value occupies in the payload;\n * a property with no bind sits at its own name at the root (1:1). This module is\n * isomorphic — the dashboard renders forms with it, and the API layer inverts a\n * submitted payload through it to validate against the form contract. One\n * implementation, both sides.\n *\n * mapPayloadToForm — payload → flat form values, to PREFILL/display the form\n * (server-side: to validate a submitted payload)\n * mapFormToPayload — flat form values → payload, the shape submitted/stored\n */\nimport { isDisplayOnlyField } from './display-only-widgets';\n\ntype PathSeg = { key: string } | { index: number };\n\nconst BLOCKED_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n/** Parse a bind path — dot keys with optional `[n]` indices. Rejects pollution keys. */\nexport function parsePath(path: string): PathSeg[] {\n const segs: PathSeg[] = [];\n for (const raw of path.split('.')) {\n const m = raw.match(/^([^[\\]]*)((?:\\[\\d+\\])*)$/);\n if (!m) throw new Error(`invalid x-lt-bind path segment: \"${raw}\"`);\n const [, name, brackets] = m;\n if (name) {\n if (BLOCKED_KEYS.has(name)) throw new Error(`x-lt-bind path may not target \"${name}\"`);\n segs.push({ key: name });\n }\n for (const b of brackets.match(/\\d+/g) ?? []) segs.push({ index: Number(b) });\n }\n if (segs.length === 0) throw new Error(`empty x-lt-bind path: \"${path}\"`);\n return segs;\n}\n\n/** Set `value` at `path` inside `root`, creating intermediate objects/arrays. */\nexport function setDeep(root: Record<string, any>, path: string, value: unknown): void {\n const segs = parsePath(path);\n let node: any = root;\n for (let i = 0; i < segs.length - 1; i++) {\n const seg = segs[i];\n const next = segs[i + 1];\n const childKey = 'key' in seg ? seg.key : seg.index;\n const wantArray = 'index' in next;\n if (node[childKey] == null || typeof node[childKey] !== 'object') {\n node[childKey] = wantArray ? [] : {};\n }\n node = node[childKey];\n }\n const last = segs[segs.length - 1];\n node['key' in last ? last.key : last.index] = value;\n}\n\n/** Read the value at `path` inside `root` (undefined if any segment is missing). */\nexport function getDeep(root: unknown, path: string): unknown {\n let node: any = root;\n for (const seg of parsePath(path)) {\n if (node == null || typeof node !== 'object') return undefined;\n node = node['key' in seg ? seg.key : seg.index];\n }\n return node;\n}\n\n/** The bind path for a form property (its `x-lt-bind`, or the property name). */\nexport function bindPathFor(propName: string, propDef: Record<string, any> | undefined): string {\n const bind = propDef?.['x-lt-bind'];\n return typeof bind === 'string' && bind.length > 0 ? bind : propName;\n}\n\n/**\n * Assemble the payload from the form's flat values. A field absent from\n * `formValues` is omitted (so clearing/deleting a field drops it from the\n * payload). Unknown keys not declared in the schema are dropped, and so are\n * display-only widget fields, which carry no answer. With no schema\n * properties, values pass through unchanged.\n */\nexport function mapFormToPayload(\n formValues: Record<string, any>,\n formSchema: Record<string, any> | null | undefined,\n): Record<string, any> {\n const props = formSchema?.properties as Record<string, any> | undefined;\n if (!props) return { ...formValues };\n const payload: Record<string, any> = {};\n for (const [name, def] of Object.entries(props)) {\n if (!(name in formValues)) continue;\n if (isDisplayOnlyField(def as Record<string, unknown>)) continue;\n setDeep(payload, bindPathFor(name, def as Record<string, any>), formValues[name]);\n }\n return payload;\n}\n\n/**\n * Reverse of {@link mapFormToPayload}: pull each form field's value out of the\n * payload via its bind path, to prefill/display the form. A field whose bound\n * path is missing from the payload is omitted (the caller falls back to the\n * schema default).\n */\nexport function mapPayloadToForm(\n payload: Record<string, any> | null | undefined,\n formSchema: Record<string, any> | null | undefined,\n): Record<string, any> {\n const props = formSchema?.properties as Record<string, any> | undefined;\n if (!props) return payload ? { ...payload } : {};\n const form: Record<string, any> = {};\n for (const [name, def] of Object.entries(props)) {\n const v = getDeep(payload, bindPathFor(name, def as Record<string, any>));\n if (v !== undefined) form[name] = v;\n }\n return form;\n}\n","/**\n * x-lt-help — the form's guidance content, rendered in the side panel beside\n * the resolve form. A form_schema may declare schema-level `x-lt-help`: a\n * markdown string whose `{{domain.path}}` tokens interpolate values from the\n * escalation surface, so help text can reference the live record:\n *\n * {{escalation.role}} — any column on the escalation row\n * {{metadata.schema_version}} — the row's metadata dict\n * {{envelope.formDefaults.customer.name}} — the workflow-sent input envelope\n * {{payload.category}} — the escalation context payload\n * {{resolver.notes}} — the submitted resolver payload\n * {{lookup.materials.items}} — versioned knowledge lookups pinned on the row\n * {{roster.orders.outstanding}} (a roster field's counts, x-lt-roster.ts)\n *\n * Paths reuse the x-lt-bind syntax (`a.b[0].c`). A missing value renders as an\n * em dash. `x-lt-context` is accepted as the plain-text fallback source when\n * `x-lt-help` is absent.\n */\nimport { getDeep } from './x-lt-bind';\n\n/** The token domains a help template may reference. `input` is the invoke-form name for the live values `resolver` also carries. */\nexport const HELP_DOMAINS = ['escalation', 'metadata', 'envelope', 'payload', 'resolver', 'lookup', 'input', 'roster'] as const;\nexport type HelpDomain = (typeof HELP_DOMAINS)[number];\n\nexport type HelpTokenContext = Partial<Record<HelpDomain, Record<string, unknown> | null>>;\n\nconst TOKEN_PATTERN = /\\{\\{\\s*([^{}]+?)\\s*\\}\\}/g;\nconst MISSING_VALUE = '—';\n\nfunction formatTokenValue(value: unknown): string {\n if (value === undefined || value === null) return MISSING_VALUE;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return MISSING_VALUE;\n }\n}\n\n/** Replace every `{{domain.path}}` token with its value from the context. */\nexport function interpolateHelp(template: string, ctx: HelpTokenContext): string {\n return template.replace(TOKEN_PATTERN, (_match, rawPath: string) => {\n const dot = rawPath.indexOf('.');\n const domain = (dot === -1 ? rawPath : rawPath.slice(0, dot)) as HelpDomain;\n if (!HELP_DOMAINS.includes(domain)) return MISSING_VALUE;\n const root = ctx[domain];\n if (dot === -1) return formatTokenValue(root);\n try {\n return formatTokenValue(getDeep(root, rawPath.slice(dot + 1)));\n } catch {\n return MISSING_VALUE;\n }\n });\n}\n\n/** The schema's help source: `x-lt-help` first, `x-lt-context` as fallback. */\nexport function resolveHelpSource(schema: Record<string, unknown> | null | undefined): string | null {\n const help = schema?.['x-lt-help'];\n if (typeof help === 'string' && help.trim().length > 0) return help;\n const context = schema?.['x-lt-context'];\n if (typeof context === 'string' && context.trim().length > 0) return context;\n return null;\n}\n\n/** The schema's help content, interpolated. Null when the schema declares none. */\nexport function buildHelpMarkdown(\n schema: Record<string, unknown> | null | undefined,\n ctx: HelpTokenContext,\n): string | null {\n const source = resolveHelpSource(schema);\n return source ? interpolateHelp(source, ctx) : null;\n}\n\nexport interface HelpStateHint {\n isTerminal: boolean;\n status?: string;\n claimed: boolean;\n claimedByMe: boolean;\n}\n\n/**\n * State-aware guidance shown when the schema carries no help content — the\n * panel always tells the user what this page expects of them right now.\n */\nexport function defaultHelpMarkdown({ isTerminal, status, claimed, claimedByMe }: HelpStateHint): string {\n if (isTerminal) {\n return status === 'cancelled'\n ? 'This escalation was cancelled. The record is shown for reference.'\n : 'This escalation has been resolved. The submitted form is shown for reference.';\n }\n if (claimedByMe) return 'You have claimed this escalation. Fill out the form and submit to resolve it.';\n if (claimed) return 'Another user has claimed this escalation. It unlocks if their claim expires or is released.';\n return 'Claim this escalation to enable the form.';\n}\n","import { DateValue } from './DateValue';\nimport { UserName } from './UserName';\nimport { formatAgoCompact } from '../../../lib/format';\nimport { formatDisplayDateTime } from '../../../lib/display-zone';\n\nconst ISO_DATETIME = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}/;\nexport const EM_DASH = '—';\n\n/** Value formats an author may name on a column, card field, or fact. `ago` is the spoken form of `age`. */\nexport const FIELD_FORMATS = {\n AGE: 'age',\n AGO: 'ago',\n DATE: 'date',\n USER: 'user',\n} as const;\n\n/** True when the format renders as an age that ages with the clock. */\nexport function isAgeFormat(format?: string): boolean {\n return format === FIELD_FORMATS.AGE || format === FIELD_FORMATS.AGO;\n}\n\n/**\n * Render a value with a little care: `age`/`ago` turns a timestamp into a\n * compact age (\"12m\", \"3h\") with the absolute time as its tooltip; `date`\n * renders the full date, hoverable, and so does any ISO datetime with no\n * format; `user` resolves a user id to a display name; an empty value a quiet\n * em dash; anything else plain text.\n */\nexport function FormattedValue({ raw, format }: { raw: string; format?: string }) {\n if (!raw || raw === EM_DASH) return <span className=\"text-text-quaternary\">{EM_DASH}</span>;\n if (format === FIELD_FORMATS.USER) return <UserName userId={raw} className=\"block truncate\" />;\n const isDate = ISO_DATETIME.test(raw) || !Number.isNaN(new Date(raw).getTime()) && (isAgeFormat(format) || format === FIELD_FORMATS.DATE);\n if (isAgeFormat(format) && isDate) {\n return <span title={formatDisplayDateTime(raw)} className=\"tabular-nums whitespace-nowrap\">{formatAgoCompact(raw)}</span>;\n }\n if (isDate && (format === FIELD_FORMATS.DATE || ISO_DATETIME.test(raw))) {\n return <DateValue date={raw} format=\"datetime\" className=\"text-text-primary whitespace-nowrap\" />;\n }\n return <>{raw}</>;\n}\n","/**\n * List rows arrive without the heavyweight `envelope`/`escalation_payload`\n * columns by default. A surface driven by an x-lt schema fragment opts back in\n * only when the fragment actually interpolates those domains — `envelope.` or\n * `payload.` in any token, condition, or source path. `metadata.` and\n * `resolver.` ride the slim rows and never trigger the opt-in.\n */\nexport function schemaNeedsEnvelope(fragment: unknown): boolean {\n if (!fragment) return false;\n try {\n const s = JSON.stringify(fragment);\n return s.includes('envelope.') || s.includes('payload.');\n } catch {\n return false;\n }\n}\n","import type { LTEscalationRecord } from '../api/types';\nimport { interpolateHelp, type HelpTokenContext } from './x-lt-help';\nimport { getDeep } from './x-lt-bind';\n\n/** One held item of an accumulator or batch row, in the shape the workflow receives. */\nexport interface EscalationItem {\n itemKey: string;\n payload?: Record<string, unknown>;\n /** ISO-8601 from the database clock; empty for a batch item with no stamp. */\n at: string;\n actor?: string;\n reciprocalId?: string;\n}\n\nexport interface EscalationItems {\n kind: 'accumulate' | 'batch';\n count: number;\n /** The count trigger (accumulate) or the declared size (batch); null when unbounded. */\n max: number | null;\n items: EscalationItem[];\n /** Batch only: declared keys still awaiting submission. */\n pending: string[];\n}\n\nconst ACCUMULATE_ITEMS = 'accumulate_items';\nconst ACCUMULATE_MAX = 'accumulate_max';\nconst BATCH_ITEMS = 'batch_items';\nconst BATCH_FILLED_AT = 'batch_filled_at';\nconst BATCH_FILLED_BY = 'batch_filled_by';\nconst BATCH_KEYS = 'batch_keys';\nconst BATCH_PENDING = 'batch_pending';\n\nfunction isRecord(v: unknown): v is Record<string, unknown> {\n return !!v && typeof v === 'object' && !Array.isArray(v);\n}\n\nfunction byArrival(a: EscalationItem, b: EscalationItem): number {\n return a.at.localeCompare(b.at) || a.itemKey.localeCompare(b.itemKey);\n}\n\n/**\n * The held items of a row, or null when the row is neither an accumulator\n * nor a batch. Mirrors the server's items view so the panel and the API\n * agree on order (arrival, then key).\n */\nexport function escalationItems(\n esc: Pick<LTEscalationRecord, 'metadata'>,\n envelope: Record<string, unknown> | null,\n): EscalationItems | null {\n const metadata = (esc.metadata ?? {}) as Record<string, unknown>;\n const store = envelope?.[ACCUMULATE_ITEMS];\n if (isRecord(store)) {\n const items = Object.entries(store).map(([itemKey, entry]) => {\n const e = isRecord(entry) ? entry : {};\n return {\n itemKey,\n at: typeof e.at === 'string' ? e.at : '',\n ...(isRecord(e.payload) ? { payload: e.payload } : {}),\n ...(typeof e.actor === 'string' ? { actor: e.actor } : {}),\n ...(typeof e.reciprocalId === 'string' ? { reciprocalId: e.reciprocalId } : {}),\n } as EscalationItem;\n }).sort(byArrival);\n const max = metadata[ACCUMULATE_MAX];\n return { kind: 'accumulate', count: items.length, max: typeof max === 'number' ? max : null, items, pending: [] };\n }\n const pending = metadata[BATCH_PENDING];\n if (Array.isArray(pending)) {\n const filled = isRecord(envelope?.[BATCH_ITEMS]) ? (envelope![BATCH_ITEMS] as Record<string, unknown>) : {};\n const stamps = isRecord(envelope?.[BATCH_FILLED_AT]) ? (envelope![BATCH_FILLED_AT] as Record<string, unknown>) : {};\n const actors = isRecord(envelope?.[BATCH_FILLED_BY]) ? (envelope![BATCH_FILLED_BY] as Record<string, unknown>) : {};\n const items = Object.entries(filled).map(([itemKey, payload]) => ({\n itemKey,\n at: typeof stamps[itemKey] === 'string' ? (stamps[itemKey] as string) : '',\n ...(isRecord(payload) ? { payload } : {}),\n ...(typeof actors[itemKey] === 'string' ? { actor: actors[itemKey] as string } : {}),\n } as EscalationItem)).sort(byArrival);\n const keys = metadata[BATCH_KEYS];\n return {\n kind: 'batch',\n count: items.length,\n max: Array.isArray(keys) ? keys.length : null,\n items,\n pending: pending.filter((k): k is string => typeof k === 'string'),\n };\n }\n return null;\n}\n\n/** A one-line summary of an item payload for the list row. */\nexport function summarizePayload(payload: Record<string, unknown> | undefined): string {\n if (!payload) return '';\n const parts = Object.entries(payload).slice(0, 3).map(([k, v]) => {\n const text = typeof v === 'object' && v !== null ? JSON.stringify(v) : String(v);\n return `${k}: ${text.length > 24 ? `${text.slice(0, 23)}…` : text}`;\n });\n const more = Object.keys(payload).length - parts.length;\n return more > 0 ? `${parts.join(' · ')} · +${more}` : parts.join(' · ');\n}\n\n/** The container role's form-schema key naming how each held item displays. */\nexport const ITEM_LABEL_KEY = 'x-lt-item-label';\n\nconst TOKEN = /\\{\\{\\s*([^{}]+?)\\s*\\}\\}/g;\nconst ITEM_DOMAIN = 'item';\nconst MISSING = '—';\n\nfunction formatValue(value: unknown): string | null {\n if (value === undefined || value === null || value === '') return null;\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n try {\n return JSON.stringify(value);\n } catch {\n return null;\n }\n}\n\n/** One token's value: `item.*` from the held item, every other domain as help tokens resolve it. */\nfunction tokenValue(path: string, item: EscalationItem, ctx: HelpTokenContext): string | null {\n const dot = path.indexOf('.');\n const domain = dot === -1 ? path : path.slice(0, dot);\n if (domain === ITEM_DOMAIN) {\n try {\n return formatValue(dot === -1 ? item : getDeep(item, path.slice(dot + 1)));\n } catch {\n return null;\n }\n }\n const value = interpolateHelp(`{{${path}}}`, ctx);\n return value === MISSING ? null : value;\n}\n\n/**\n * An item's display label from the role's `x-lt-item-label` template, whose\n * `{{item.*}}` tokens read the held item (itemKey, payload, actor, at) beside\n * the usual escalation domains. Null when there is no template or every token\n * it names is missing, so the caller falls back to the item key.\n */\nexport function itemLabel(\n template: unknown,\n item: EscalationItem,\n ctx: HelpTokenContext = {},\n): string | null {\n if (typeof template !== 'string' || !template.trim()) return null;\n let resolved = 0;\n let tokens = 0;\n const label = template.replace(TOKEN, (_match, rawPath: string) => {\n tokens += 1;\n const value = tokenValue(rawPath, item, ctx);\n if (value === null) return MISSING;\n resolved += 1;\n return value;\n }).trim();\n if (tokens > 0 && resolved === 0) return null;\n return label || null;\n}\n\n/** A template over `{{item.*}}` and the escalation domains; missing tokens read as an em dash. */\nexport function interpolateItemTemplate(template: string, item: EscalationItem | undefined, ctx: HelpTokenContext = {}): string {\n return template.replace(TOKEN, (_match, rawPath: string) => {\n if (!item && rawPath.split('.')[0] === ITEM_DOMAIN) return MISSING;\n return tokenValue(rawPath, item ?? ({} as EscalationItem), ctx) ?? MISSING;\n });\n}\n"],"names":["DISPLAY_ONLY_WIDGET_NAMES","DISPLAY_ONLY_WIDGETS","isDisplayOnlyWidget","name","isDisplayOnlyField","def","BLOCKED_KEYS","parsePath","path","segs","raw","m","brackets","b","setDeep","root","value","node","i","seg","next","childKey","wantArray","last","getDeep","bindPathFor","propName","propDef","bind","mapFormToPayload","formValues","formSchema","props","payload","mapPayloadToForm","form","v","HELP_DOMAINS","TOKEN_PATTERN","MISSING_VALUE","formatTokenValue","interpolateHelp","template","ctx","_match","rawPath","dot","domain","resolveHelpSource","schema","help","context","buildHelpMarkdown","source","defaultHelpMarkdown","isTerminal","status","claimed","claimedByMe","ISO_DATETIME","EM_DASH","FIELD_FORMATS","isAgeFormat","format","FormattedValue","jsx","UserName","isDate","formatDisplayDateTime","formatAgoCompact","DateValue","schemaNeedsEnvelope","fragment","s","ACCUMULATE_ITEMS","ACCUMULATE_MAX","BATCH_ITEMS","BATCH_FILLED_AT","BATCH_FILLED_BY","BATCH_KEYS","BATCH_PENDING","isRecord","byArrival","a","escalationItems","esc","envelope","metadata","store","items","itemKey","entry","e","max","pending","filled","stamps","actors","keys","k","summarizePayload","parts","text","more","ITEM_LABEL_KEY","TOKEN","ITEM_DOMAIN","MISSING","formatValue","tokenValue","item","itemLabel","resolved","tokens","label","interpolateItemTemplate"],"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-cat-1: 88 128 176;--lt-cat-2: 224 146 78;--lt-cat-3: 104 168 104;--lt-cat-4: 204 100 100;--lt-cat-5: 150 126 194;--lt-cat-6: 82 170 168;--lt-cat-7: 182 154 74;--lt-cat-8: 156 120 96;--lt-cat-9: 202 118 162;--lt-cat-10: 148 158 80;--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:disabled{cursor:not-allowed;opacity:.4}.btn-primary:hover:disabled{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent) / 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:disabled{cursor:not-allowed;opacity:.4}.btn-secondary:hover:disabled{--tw-bg-opacity: 1;background-color:rgb(var(--lt-surface-raised) / 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{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{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.\!field::placeholder{--tw-text-opacity: 1;color:rgb(var(--lt-text-tertiary) / var(--tw-text-opacity, 1))}.\!field: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-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{border-radius:var(--lt-radius-field)!important}.field,.input,.select,.textarea{border-radius:var(--lt-radius-field)}.\!input{border-radius:var(--lt-radius-field)!important}.\!field,.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-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-\[var\(--lt-sticky-top\,60px\)\]{top:var(--lt-sticky-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}.order-9{order:9}.col-span-2{grid-column:span 2 / span 2}.col-span-full{grid-column:1 / -1}.col-start-3{grid-column-start:3}.col-start-4{grid-column-start:4}.float-right{float:right}.m-1{margin:.25rem}.m-2{margin:.5rem}.-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-1\.5{margin-left:.375rem;margin-right:.375rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.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-6{margin-top:1.5rem;margin-bottom:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.-mb-16{margin-bottom:-4rem}.-mb-\[calc\(4rem-var\(--lt-space-page-x\)\)\]{margin-bottom:calc(calc(4rem - var(--lt-space-page-x)) * -1)}.-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}.-mt-\[calc\(2rem-var\(--lt-space-page-x\)\)\]{margin-top:calc(calc(2rem - var(--lt-space-page-x)) * -1)}.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-3{margin-right:.75rem}.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-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}.mt-px{margin-top:1px}.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!important}.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-9{height:2.25rem}.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-72{max-height:18rem}.max-h-80{max-height:20rem}.max-h-96{max-height:24rem}.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-5rem\)\]{max-height:calc(100vh - 5rem)}.max-h-\[calc\(100vh-6rem\)\]{max-height:calc(100vh - 6rem)}.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-9{min-height:2.25rem}.min-h-\[100px\]{min-height:100px}.min-h-\[120px\]{min-height:120px}.min-h-\[14rem\]{min-height:14rem}.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-\[4\.5rem\]{min-height:4.5rem}.min-h-\[40vh\]{min-height:40vh}.min-h-\[48px\]{min-height:48px}.min-h-\[55vh\]{min-height:55vh}.min-h-\[5rem\]{min-height:5rem}.min-h-\[60px\]{min-height:60px}.min-h-\[60vh\]{min-height:60vh}.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-\[14rem\]{width:14rem}.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-72{min-width:18rem}.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-\[15rem\]{min-width:15rem}.min-w-\[16rem\]{min-width:16rem}.min-w-\[17rem\]{min-width:17rem}.min-w-\[180px\]{min-width:180px}.min-w-\[18px\]{min-width:18px}.min-w-\[19rem\]{min-width:19rem}.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-96{max-width:24rem}.max-w-\[10rem\]{max-width:10rem}.max-w-\[120px\]{max-width:120px}.max-w-\[12rem\]{max-width:12rem}.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-\[28rem\]{max-width:28rem}.max-w-\[32rem\]{max-width:32rem}.max-w-\[460px\]{max-width:460px}.max-w-\[6rem\]{max-width:6rem}.max-w-\[70\%\]{max-width:70%}.max-w-\[85\%\]{max-width:85%}.max-w-\[85vw\]{max-width:85vw}.max-w-\[90vw\]{max-width:90vw}.max-w-\[9rem\]{max-width:9rem}.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-lg{max-width:32rem}.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-\[1\]{flex:1}.flex-\[3\]{flex:3}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-full{flex-basis:100%}.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-\[click-hint_2\.6s_ease-in-out_both\]{animation:click-hint 2.6s ease-in-out both}.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 fadeIn{0%{opacity:0}to{opacity:1}}.animate-fade-in{animation:fadeIn .2s ease-out}@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-\[minmax\(18rem\,auto\)\]{grid-auto-rows:minmax(18rem,auto)}.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-\[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-\[auto_1fr_auto\]{grid-template-columns:auto 1fr auto}.grid-cols-\[auto_auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto auto minmax(0,1fr) auto}.grid-cols-\[auto_minmax\(6rem\,1fr\)_minmax\(0\,2fr\)_auto_auto_auto\]{grid-template-columns:auto minmax(6rem,1fr) minmax(0,2fr) auto auto auto}.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\(11rem\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(11rem,1fr))}.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)}.divide-surface-border\/60>:not([hidden])~:not([hidden]){border-color:rgb(var(--lt-surface-border) / .6)}.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-\[var\(--lt-radius-field\)\]{border-top-right-radius:var(--lt-radius-field);border-bottom-right-radius:var(--lt-radius-field)}.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\/25{border-color:rgb(var(--lt-status-warning) / .25)}.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-transparent{border-color:transparent}.\!border-l-accent{--tw-border-opacity: 1 !important;border-left-color:rgb(var(--lt-accent) / var(--tw-border-opacity, 1))!important}.border-b-surface-border\/40{border-bottom-color:rgb(var(--lt-surface-border) / .4)}.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\/40{background-color:rgb(var(--lt-accent) / .4)}.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-8{padding-left:2rem;padding-right:2rem}.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-0\.5{padding-left:.125rem}.pl-1{padding-left:.25rem}.pl-1\.5{padding-left:.375rem}.pl-10{padding-left:2.5rem}.pl-11{padding-left:2.75rem}.pl-12{padding-left:3rem}.pl-14{padding-left:3.5rem}.pl-16{padding-left:4rem}.pl-2{padding-left:.5rem}.pl-2\.5{padding-left:.625rem}.pl-20{padding-left:5rem}.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-1\.5{padding-right:.375rem}.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-1\.5{padding-top:.375rem}.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-4xl{font-size:2.25rem;line-height:2.5rem}.text-7xl{font-size:4.5rem;line-height:1}.text-\[0\.5em\]{font-size:.5em}.text-\[0\.625rem\]{font-size:.625rem}.text-\[0\.7875rem\]{font-size:.7875rem}.text-\[0\.85em\]{font-size:.85em}.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-xl{font-size:1.25rem;line-height:1.75rem}.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-normal{letter-spacing:0em}.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\/65{color:rgb(var(--lt-accent) / .65)}.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-graphic{--tw-text-opacity: 1;color:rgb(var(--lt-status-success-graphic) / 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-white\/75{color:#ffffffbf}.text-white\/95{color:#fffffff2}.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{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-2{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);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}.\@container\/tape{container-type:inline-size;container-name:tape}.\[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)}}@keyframes click-hint{0%{opacity:0;transform:translate(-50%,calc(-100% + 6px)) scale(.94)}10%{opacity:1;transform:translate(-50%,-100%) scale(1.03)}18%{transform:translate(-50%,-100%) scale(1)}82%{opacity:1;transform:translate(-50%,-100%) scale(1)}to{opacity:0;transform:translate(-50%,calc(-100% - 10px)) scale(1)}}.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\:bg-surface-field-focus:focus-within{--tw-bg-opacity: 1;background-color:rgb(var(--lt-field-focus) / var(--tw-bg-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-status-error\/50:hover{border-color:rgb(var(--lt-status-error) / .5)}.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)}.enabled\:hover\:border-accent\/60:hover:enabled{border-color:rgb(var(--lt-accent) / .6)}.enabled\:hover\:bg-accent\/5:hover:enabled{background-color:rgb(var(--lt-accent) / .05)}.enabled\:hover\:text-accent:hover:enabled{--tw-text-opacity: 1;color:rgb(var(--lt-accent) / var(--tw-text-opacity, 1))}.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\:opacity-60:disabled{opacity:.6}.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-accent:hover:disabled{--tw-bg-opacity: 1;background-color:rgb(var(--lt-accent) / var(--tw-bg-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 tape (min-width: 48rem){.\@table\/tape\:col-span-1{grid-column:span 1 / span 1}.\@table\/tape\:col-start-4{grid-column-start:4}.\@table\/tape\:col-start-5{grid-column-start:5}.\@table\/tape\:col-start-6{grid-column-start:6}.\@table\/tape\:max-w-\[22rem\]{max-width:22rem}.\@table\/tape\:grid-cols-\[auto_auto_6rem_11rem_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto auto 6rem 11rem minmax(0,1fr) auto}}@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_460px\]{grid-template-columns:1fr 460px}.\@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\:sticky{position:sticky}.\@wall\:top-0{top:0}.\@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\:inline{display:inline}.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:768px){.md\:flex{display:flex}}@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\:px-8{padding-left:2rem;padding-right:2rem}.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}
@@ -1,2 +1,2 @@
1
- import{a as u,j as e}from"./vendor-query-DvWWuNIB.js";import{$ as C,aA as I,aB as M,ah as A,aC as R,aD as T}from"./index-Dz6R8-Dw.js";import{P as B}from"./PageHeader-BSWIspNB.js";import"./FilterBar-BygWrnB1.js";import{W as F}from"./WorkflowPill-DJLcK_CM.js";import{W as S,u as q,l as Q,e as $,L as O}from"./ResolverForm-ZVufJ4G-.js";import{a as k}from"./validate-FlXCBBT6.js";import{N as z}from"./NamespacePill-C5epAgq6.js";import{O as U,ax as D,ay as _,g as L,k as H,az as V,aA as Y,ao as G}from"./vendor-icons-DUYcKTjP.js";import{B as J}from"./BotPicker-CDq9XRMp.js";import{f as K}from"./vendor-react-_9U4mKFr.js";import"./RosterWidget-BkLAwEYB.js";import"./escalation-items-Cy0ZgJqV.js";import"./UserName-DQFjuoib.js";import"./StatusBadge-DHVwxre2.js";import"./constants-CeBBTzf5.js";import"./bots-BmEiPAWY.js";function X(t){const[a,n]=u.useState(()=>{try{return window.matchMedia(t).matches}catch{return!1}});return u.useEffect(()=>{let i;try{i=window.matchMedia(t)}catch{return}n(i.matches);const r=l=>n(l.matches);return i.addEventListener("change",r),()=>i.removeEventListener("change",r)},[t]),a}const Z="No Queue";function W(t){return[...new Set(t.map(a=>a.task_queue).filter(Boolean))].sort()}function E(t,a,n){const i=a.toLowerCase().trim(),r=o=>{var x;return!i||o.workflow_type.toLowerCase().includes(i)||((x=o.description)==null?void 0:x.toLowerCase().includes(i))},m=(n?[n]:W(t)).map(o=>({queue:o,workflows:t.filter(x=>x.task_queue===o&&r(x))})).filter(o=>o.workflows.length>0);if(!n){const o=t.filter(x=>!x.task_queue&&r(x));o.length>0&&m.push({queue:"",workflows:o})}return m}function ee(t){var a,n;return((n=(a=E(t,"",null)[0])==null?void 0:a.workflows[0])==null?void 0:n.workflow_type)??null}function te({configs:t,selectedType:a,onSelect:n,tierMap:i,activeTypes:r,search:l,activeQueue:m,compact:o=!1}){const x=u.useMemo(()=>E(t,l,m),[t,l,m]);return x.length===0?e.jsx("p",{className:"text-sm text-text-tertiary py-8 text-center",children:"No workflows match your filter."}):e.jsx("div",{className:o?"space-y-6":"space-y-10",children:x.map(({queue:f,workflows:d})=>e.jsxs("div",{children:[e.jsxs("div",{className:`flex items-center gap-2 py-2 mb-1 border-b border-surface-border ${o?"":"sticky top-[60px] z-10 bg-surface mb-2"}`,children:[f?e.jsx(U,{className:"w-3 h-3 text-accent shrink-0",strokeWidth:1.5}):e.jsx(D,{className:"w-3 h-3 text-text-quaternary shrink-0",strokeWidth:1.5}),e.jsx("h2",{className:"section-h2 truncate",title:f||void 0,children:f?k(f):Z}),e.jsx("span",{className:"text-xs text-text-quaternary",children:d.length})]}),e.jsx("div",{className:o?"":"divide-y divide-surface-border/30",children:d.map(c=>e.jsx(se,{config:c,isSelected:a===c.workflow_type,tier:i.get(c.workflow_type)??"durable",cronActive:(r==null?void 0:r.has(c.workflow_type))??!1,onSelect:n,compact:o},c.workflow_type))})]},f||"__none__"))})}function se({config:t,isSelected:a,tier:n,cronActive:i,onSelect:r,compact:l}){const m=n==="certified"?"certified":n==="registered"?"registered":"durable";return l?e.jsxs("button",{onClick:()=>r(t),"aria-current":a?"true":void 0,title:t.workflow_type,className:`group w-full text-left flex items-center gap-2.5 pl-3 pr-2 py-2 border-l-2 transition-colors ${a?"border-accent bg-accent/10 text-accent":"border-transparent text-text-primary hover:bg-surface-hover"}`,children:[e.jsx(S,{icon:t.icon,tier:n,className:`w-5 h-5 shrink-0 ${a?"text-accent":"text-accent/65"}`}),e.jsx("span",{className:"text-sm truncate",children:k(t.workflow_type)}),i&&e.jsx("span",{title:"Cron schedule active",className:"ml-auto shrink-0",children:e.jsx(_,{className:"w-3 h-3 text-status-success/70"})})]}):e.jsxs("button",{onClick:()=>r(t),className:"group relative w-full text-left py-2 px-3 -mx-3 rounded-md hover:bg-surface-hover/30 transition-colors duration-150",children:[a&&e.jsx("span",{className:"absolute left-0 top-1 bottom-1 w-0.5 bg-accent rounded-full"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(F,{type:t.workflow_type,size:"md",variant:m}),t.description&&e.jsx("p",{className:"flex-1 min-w-0 truncate text-2xs text-text-tertiary group-hover:text-text-secondary transition-colors",children:t.description}),e.jsxs("span",{className:"ml-auto flex items-center gap-2 shrink-0",children:[t.execute_as&&e.jsxs("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-2xs bg-accent/10 text-accent rounded",children:[e.jsx(L,{className:"w-2.5 h-2.5"}),t.execute_as]}),i&&e.jsx("span",{title:"Cron schedule active",children:e.jsx(_,{className:"w-3 h-3 text-status-success/70 shrink-0"})}),e.jsx(z,{namespace:"durable"}),e.jsx("span",{title:"Configure & invoke",children:e.jsx(H,{className:`w-3 h-3 transition-opacity ${a?"text-accent opacity-100":"text-accent opacity-0 group-hover:opacity-100"}`,strokeWidth:1.5})})]})]})]})}function ae({config:t,overrideBot:a,onOverrideChange:n,showOverride:i}){const{user:r}=C(),l=a||t.execute_as;return e.jsxs("div",{className:"bg-surface-sunken rounded-lg px-4 py-3 space-y-3",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("span",{className:"text-2xs text-text-tertiary uppercase tracking-wider font-medium",children:"Running as"}),l&&!a&&e.jsx("span",{className:"text-2xs text-text-tertiary",children:"configured default"}),a&&e.jsx("span",{className:"text-2xs text-accent",children:"admin override"})]}),e.jsx("div",{className:"field flex items-center gap-1.5",children:l?e.jsxs(e.Fragment,{children:[e.jsx(L,{className:"w-3.5 h-3.5 text-accent/70 shrink-0"}),e.jsx("span",{className:"text-xs text-text-primary font-mono",children:l})]}):e.jsxs(e.Fragment,{children:[e.jsx(V,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0"}),e.jsx("span",{className:"text-xs text-text-primary",children:(r==null?void 0:r.displayName)||(r==null?void 0:r.username)||"you"})]})})]}),i&&n&&e.jsxs("div",{children:[e.jsx("label",{className:"text-2xs text-text-tertiary uppercase tracking-wider font-medium mb-1 block",children:"Override identity"}),e.jsx(J,{selected:a??"",onChange:n,placeholder:t.execute_as?`Default: ${t.execute_as}`:"Invoking user (default)"})]})]})}function re({selected:t}){const{isSuperAdmin:a,hasRoleType:n}=C(),i=a||n("admin"),[r,l]=u.useState(""),[m,o]=u.useState(t.certified);u.useEffect(()=>{l(""),o(t.certified)},[t.workflow_type,t.certified]);const x=u.useMemo(()=>{var N;const p=(N=t.envelope_schema)==null?void 0:N.metadata;return p&&typeof p=="object"?p:{}},[t.envelope_schema]),f=Array.isArray(t.input_lookups)&&t.input_lookups.length>0,{data:d}=I(t.workflow_type,f),c=u.useMemo(()=>d?M(d.lookups):void 0,[d]),w=(d==null?void 0:d.lookups.filter(p=>p.missing))??[],j=q(t,{certified:m,overrideBot:r}),y=e.jsxs(e.Fragment,{children:[t.description&&e.jsx(A,{content:t.description,className:"text-xs text-text-secondary leading-relaxed"}),e.jsx(ae,{config:t,overrideBot:r,onOverrideChange:l,showOverride:i}),t.certified&&e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:m,onChange:p=>o(p.target.checked),className:"rounded border-surface-border text-accent focus:ring-accent/30"}),e.jsx(Y,{className:"w-3.5 h-3.5 text-text-tertiary"}),e.jsx("span",{className:"text-xs text-text-secondary",children:"Enable task tracking and escalation routing"})]})]});return e.jsxs("div",{className:"max-w-form","data-testid":"invoke-form",children:[e.jsxs("header",{className:"sticky top-0 z-10 bg-surface -mt-8 pt-8 flex items-baseline gap-3 min-w-0 pb-3 mb-5 border-b border-surface-border/60",children:[e.jsx(S,{icon:t.icon,tier:t.tier,className:"w-7 h-7 self-center shrink-0 text-accent"}),e.jsx("h2",{className:"heading-2 truncate",title:t.workflow_type,children:k(t.workflow_type)}),e.jsx("span",{className:"text-2xs font-mono text-text-quaternary shrink-0",children:t.workflow_type}),e.jsx("span",{className:"text-2xs uppercase tracking-widest text-text-tertiary shrink-0",children:t.tier}),t.task_queue&&e.jsx("span",{className:"text-2xs font-mono text-text-quaternary truncate",children:t.task_queue})]}),w.length>0&&e.jsxs("p",{className:"flex items-center gap-1.5 text-2xs text-status-warning mb-4","data-testid":"lookup-missing",children:[e.jsx(G,{className:"w-3 h-3 shrink-0",strokeWidth:1.5}),w.map(Q).join(", ")," ",w.length===1?"is":"are"," not available; the fields that read ",w.length===1?"it":"them"," fall back to plain inputs."]}),t.input_schema?e.jsx($,{selected:t,schema:t.input_schema,metadata:x,lookup:c,submission:j,lead:y}):e.jsx(O,{selected:t,metadata:x,submission:j,lead:y})]})}const b="type",ne=!1;function oe(){const[t,a]=K(),{data:n,isLoading:i}=R(),{data:r}=T(),l=X("(max-width: 1279px)"),m=t.get(b)??"",[o,x]=u.useState(""),[f,d]=u.useState(null),c=n??[],w=u.useMemo(()=>{const s=new Map;for(const h of c)s.set(h.workflow_type,h.tier);return s},[c]),j=c.find(s=>s.workflow_type===m),y=new Set((r??[]).filter(s=>s.active).map(s=>s.workflow_type)),p=u.useCallback((s,h={})=>{a(P=>{const g=new URLSearchParams(P);return s?g.set(b,s):g.delete(b),g},{replace:h.replace??!1})},[a]);if(u.useEffect(()=>{if(t.get(b)||c.length===0)return;const s=ee(c);s&&p(s,{replace:!0})},[c,t,p]),i)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});const N=W(c),v=j?e.jsx(re,{selected:j}):e.jsx("p",{className:"text-xs text-text-tertiary",children:"Choose a tool to begin."});return e.jsxs("div",{children:[e.jsx(B,{title:"Invoke Tool",docsHash:"#docs:dashboard.md:invoke-tool"}),c.length===0?e.jsxs("div",{className:"py-16 text-center",children:[e.jsx("p",{className:"text-sm text-text-primary mb-1",children:"No tools to invoke"}),e.jsx("p",{className:"text-xs text-text-tertiary",children:"Mark workflows as invocable in the registry, or start the server with examples enabled."})]}):l?e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block mb-6 max-w-2xl",children:[e.jsx("span",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tool"}),e.jsxs("select",{value:m,onChange:s=>p(s.target.value||null),className:"select text-xs font-mono w-full",children:[e.jsx("option",{value:"",children:"Choose a tool…"}),N.map(s=>e.jsx("optgroup",{label:k(s),children:c.filter(h=>(h.task_queue||"")===s).map(h=>e.jsx("option",{value:h.workflow_type,children:k(h.workflow_type)},h.workflow_type))},s)),c.filter(s=>!s.task_queue).map(s=>e.jsx("option",{value:s.workflow_type,children:k(s.workflow_type)},s.workflow_type))]})]}),e.jsx("div",{className:"pt-8",children:v})]}):e.jsxs("div",{className:"flex gap-10 items-start",children:[e.jsxs("aside",{className:"w-1/4 min-w-[15rem] shrink-0 sticky top-0 self-start -mt-8 pt-8 max-h-[calc(100vh-5rem)] overflow-y-auto pr-1 space-y-4","data-testid":"invoke-list",children:[ne,e.jsx(te,{configs:c,selectedType:m,onSelect:s=>p(s.workflow_type),tierMap:w,activeTypes:y,search:o,activeQueue:f,compact:!0})]}),e.jsx("section",{className:"flex-1 min-w-0",children:v})]})]})}function ve(){return e.jsx(oe,{})}export{ve as DurableInvokePage,oe as StartWorkflowPage};
2
- //# sourceMappingURL=index-DhSCCpqM.js.map
1
+ import{a as p,j as e}from"./vendor-query-DvWWuNIB.js";import{$ as C,aA as I,aB as M,ah as A,aC as R,aD as T}from"./index-CkMHS-hG.js";import{P as B}from"./PageHeader-Hx8APPwE.js";import"./FilterBar-BVyAjIgv.js";import{W as F}from"./WorkflowPill-D7244fKp.js";import{W as S,u as Q,l as q,e as $,L as z}from"./ResolverForm-2ks-3jXC.js";import{a as k}from"./validate-DxOaV7QS.js";import{N as O}from"./NamespacePill-OTZD2hzt.js";import{Q as U,ay as D,az as _,g as L,k as H,aA as V,aB as Y,ap as G}from"./vendor-icons-fxBvvHBi.js";import{B as J}from"./BotPicker-CofRxk4L.js";import{f as K}from"./vendor-react-_9U4mKFr.js";import"./RosterWidget-D2yovCKw.js";import"./escalation-items-7WFpPo46.js";import"./UserName-B_q_qp6V.js";import"./StatusBadge-DHVwxre2.js";import"./constants-CeBBTzf5.js";import"./bots-2RihE2Tc.js";function X(t){const[a,n]=p.useState(()=>{try{return window.matchMedia(t).matches}catch{return!1}});return p.useEffect(()=>{let i;try{i=window.matchMedia(t)}catch{return}n(i.matches);const r=l=>n(l.matches);return i.addEventListener("change",r),()=>i.removeEventListener("change",r)},[t]),a}const Z="No Queue";function W(t){return[...new Set(t.map(a=>a.task_queue).filter(Boolean))].sort()}function E(t,a,n){const i=a.toLowerCase().trim(),r=o=>{var x;return!i||o.workflow_type.toLowerCase().includes(i)||((x=o.description)==null?void 0:x.toLowerCase().includes(i))},m=(n?[n]:W(t)).map(o=>({queue:o,workflows:t.filter(x=>x.task_queue===o&&r(x))})).filter(o=>o.workflows.length>0);if(!n){const o=t.filter(x=>!x.task_queue&&r(x));o.length>0&&m.push({queue:"",workflows:o})}return m}function ee(t){var a,n;return((n=(a=E(t,"",null)[0])==null?void 0:a.workflows[0])==null?void 0:n.workflow_type)??null}function te({configs:t,selectedType:a,onSelect:n,tierMap:i,activeTypes:r,search:l,activeQueue:m,compact:o=!1}){const x=p.useMemo(()=>E(t,l,m),[t,l,m]);return x.length===0?e.jsx("p",{className:"text-sm text-text-tertiary py-8 text-center",children:"No workflows match your filter."}):e.jsx("div",{className:o?"space-y-6":"space-y-10",children:x.map(({queue:f,workflows:d})=>e.jsxs("div",{children:[e.jsxs("div",{className:`flex items-center gap-2 py-2 mb-1 border-b border-surface-border ${o?"":"sticky top-[60px] z-10 bg-surface mb-2"}`,children:[f?e.jsx(U,{className:"w-3 h-3 text-accent shrink-0",strokeWidth:1.5}):e.jsx(D,{className:"w-3 h-3 text-text-quaternary shrink-0",strokeWidth:1.5}),e.jsx("h2",{className:"section-h2 truncate",title:f||void 0,children:f?k(f):Z}),e.jsx("span",{className:"text-xs text-text-quaternary",children:d.length})]}),e.jsx("div",{className:o?"":"divide-y divide-surface-border/30",children:d.map(c=>e.jsx(se,{config:c,isSelected:a===c.workflow_type,tier:i.get(c.workflow_type)??"durable",cronActive:(r==null?void 0:r.has(c.workflow_type))??!1,onSelect:n,compact:o},c.workflow_type))})]},f||"__none__"))})}function se({config:t,isSelected:a,tier:n,cronActive:i,onSelect:r,compact:l}){const m=n==="certified"?"certified":n==="registered"?"registered":"durable";return l?e.jsxs("button",{onClick:()=>r(t),"aria-current":a?"true":void 0,title:t.workflow_type,className:`group w-full text-left flex items-center gap-2.5 pl-3 pr-2 py-2 border-l-2 transition-colors ${a?"border-accent bg-accent/10 text-accent":"border-transparent text-text-primary hover:bg-surface-hover"}`,children:[e.jsx(S,{icon:t.icon,tier:n,className:`w-5 h-5 shrink-0 ${a?"text-accent":"text-accent/65"}`}),e.jsx("span",{className:"text-sm truncate",children:k(t.workflow_type)}),i&&e.jsx("span",{title:"Cron schedule active",className:"ml-auto shrink-0",children:e.jsx(_,{className:"w-3 h-3 text-status-success/70"})})]}):e.jsxs("button",{onClick:()=>r(t),className:"group relative w-full text-left py-2 px-3 -mx-3 rounded-md hover:bg-surface-hover/30 transition-colors duration-150",children:[a&&e.jsx("span",{className:"absolute left-0 top-1 bottom-1 w-0.5 bg-accent rounded-full"}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(F,{type:t.workflow_type,size:"md",variant:m}),t.description&&e.jsx("p",{className:"flex-1 min-w-0 truncate text-2xs text-text-tertiary group-hover:text-text-secondary transition-colors",children:t.description}),e.jsxs("span",{className:"ml-auto flex items-center gap-2 shrink-0",children:[t.execute_as&&e.jsxs("span",{className:"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-2xs bg-accent/10 text-accent rounded",children:[e.jsx(L,{className:"w-2.5 h-2.5"}),t.execute_as]}),i&&e.jsx("span",{title:"Cron schedule active",children:e.jsx(_,{className:"w-3 h-3 text-status-success/70 shrink-0"})}),e.jsx(O,{namespace:"durable"}),e.jsx("span",{title:"Configure & invoke",children:e.jsx(H,{className:`w-3 h-3 transition-opacity ${a?"text-accent opacity-100":"text-accent opacity-0 group-hover:opacity-100"}`,strokeWidth:1.5})})]})]})]})}function ae({config:t,overrideBot:a,onOverrideChange:n,showOverride:i}){const{user:r}=C(),l=a||t.execute_as;return e.jsxs("div",{className:"bg-surface-sunken rounded-lg px-4 py-3 space-y-3",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("span",{className:"text-2xs text-text-tertiary uppercase tracking-wider font-medium",children:"Running as"}),l&&!a&&e.jsx("span",{className:"text-2xs text-text-tertiary",children:"configured default"}),a&&e.jsx("span",{className:"text-2xs text-accent",children:"admin override"})]}),e.jsx("div",{className:"field flex items-center gap-1.5",children:l?e.jsxs(e.Fragment,{children:[e.jsx(L,{className:"w-3.5 h-3.5 text-accent/70 shrink-0"}),e.jsx("span",{className:"text-xs text-text-primary font-mono",children:l})]}):e.jsxs(e.Fragment,{children:[e.jsx(V,{className:"w-3.5 h-3.5 text-text-tertiary shrink-0"}),e.jsx("span",{className:"text-xs text-text-primary",children:(r==null?void 0:r.displayName)||(r==null?void 0:r.username)||"you"})]})})]}),i&&n&&e.jsxs("div",{children:[e.jsx("label",{className:"text-2xs text-text-tertiary uppercase tracking-wider font-medium mb-1 block",children:"Override identity"}),e.jsx(J,{selected:a??"",onChange:n,placeholder:t.execute_as?`Default: ${t.execute_as}`:"Invoking user (default)"})]})]})}function re({selected:t}){const{isSuperAdmin:a,hasRoleType:n}=C(),i=a||n("admin"),[r,l]=p.useState(""),[m,o]=p.useState(t.certified);p.useEffect(()=>{l(""),o(t.certified)},[t.workflow_type,t.certified]);const x=p.useMemo(()=>{var N;const u=(N=t.envelope_schema)==null?void 0:N.metadata;return u&&typeof u=="object"?u:{}},[t.envelope_schema]),f=Array.isArray(t.input_lookups)&&t.input_lookups.length>0,{data:d}=I(t.workflow_type,f),c=p.useMemo(()=>d?M(d.lookups):void 0,[d]),w=(d==null?void 0:d.lookups.filter(u=>u.missing))??[],j=Q(t,{certified:m,overrideBot:r}),y=e.jsxs(e.Fragment,{children:[t.description&&e.jsx(A,{content:t.description,className:"text-xs text-text-secondary leading-relaxed"}),e.jsx(ae,{config:t,overrideBot:r,onOverrideChange:l,showOverride:i}),t.certified&&e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:m,onChange:u=>o(u.target.checked),className:"rounded border-surface-border text-accent focus:ring-accent/30"}),e.jsx(Y,{className:"w-3.5 h-3.5 text-text-tertiary"}),e.jsx("span",{className:"text-xs text-text-secondary",children:"Enable task tracking and escalation routing"})]})]});return e.jsxs("div",{className:"max-w-form","data-testid":"invoke-form",children:[e.jsxs("header",{className:"sticky top-0 z-10 bg-surface -mt-8 pt-8 flex items-baseline gap-3 min-w-0 pb-3 mb-5 border-b border-surface-border/60",children:[e.jsx(S,{icon:t.icon,tier:t.tier,className:"w-7 h-7 self-center shrink-0 text-accent"}),e.jsx("h2",{className:"heading-2 truncate",title:t.workflow_type,children:k(t.workflow_type)}),e.jsx("span",{className:"text-2xs font-mono text-text-quaternary shrink-0",children:t.workflow_type}),e.jsx("span",{className:"text-2xs uppercase tracking-widest text-text-tertiary shrink-0",children:t.tier}),t.task_queue&&e.jsx("span",{className:"text-2xs font-mono text-text-quaternary truncate",children:t.task_queue})]}),w.length>0&&e.jsxs("p",{className:"flex items-center gap-1.5 text-2xs text-status-warning mb-4","data-testid":"lookup-missing",children:[e.jsx(G,{className:"w-3 h-3 shrink-0",strokeWidth:1.5}),w.map(q).join(", ")," ",w.length===1?"is":"are"," not available; the fields that read ",w.length===1?"it":"them"," fall back to plain inputs."]}),t.input_schema?e.jsx($,{selected:t,schema:t.input_schema,metadata:x,lookup:c,submission:j,lead:y}):e.jsx(z,{selected:t,metadata:x,submission:j,lead:y})]})}const b="type",ne=!1;function oe(){const[t,a]=K(),{data:n,isLoading:i}=R(),{data:r}=T(),l=X("(max-width: 1279px)"),m=t.get(b)??"",[o,x]=p.useState(""),[f,d]=p.useState(null),c=n??[],w=p.useMemo(()=>{const s=new Map;for(const h of c)s.set(h.workflow_type,h.tier);return s},[c]),j=c.find(s=>s.workflow_type===m),y=new Set((r??[]).filter(s=>s.active).map(s=>s.workflow_type)),u=p.useCallback((s,h={})=>{a(P=>{const g=new URLSearchParams(P);return s?g.set(b,s):g.delete(b),g},{replace:h.replace??!1})},[a]);if(p.useEffect(()=>{if(t.get(b)||c.length===0)return;const s=ee(c);s&&u(s,{replace:!0})},[c,t,u]),i)return e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-8 bg-surface-sunken rounded w-48"}),e.jsx("div",{className:"h-40 bg-surface-sunken rounded"})]});const N=W(c),v=j?e.jsx(re,{selected:j}):e.jsx("p",{className:"text-xs text-text-tertiary",children:"Choose a tool to begin."});return e.jsxs("div",{children:[e.jsx(B,{title:"Invoke Tool",docsHash:"#docs:dashboard.md:invoke-tool"}),c.length===0?e.jsxs("div",{className:"py-16 text-center",children:[e.jsx("p",{className:"text-sm text-text-primary mb-1",children:"No tools to invoke"}),e.jsx("p",{className:"text-xs text-text-tertiary",children:"Mark workflows as invocable in the registry, or start the server with examples enabled."})]}):l?e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block mb-6 max-w-2xl",children:[e.jsx("span",{className:"block text-2xs font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Tool"}),e.jsxs("select",{value:m,onChange:s=>u(s.target.value||null),className:"select text-xs font-mono w-full",children:[e.jsx("option",{value:"",children:"Choose a tool…"}),N.map(s=>e.jsx("optgroup",{label:k(s),children:c.filter(h=>(h.task_queue||"")===s).map(h=>e.jsx("option",{value:h.workflow_type,children:k(h.workflow_type)},h.workflow_type))},s)),c.filter(s=>!s.task_queue).map(s=>e.jsx("option",{value:s.workflow_type,children:k(s.workflow_type)},s.workflow_type))]})]}),e.jsx("div",{className:"pt-8",children:v})]}):e.jsxs("div",{className:"flex gap-10 items-start",children:[e.jsxs("aside",{className:"w-1/4 min-w-[15rem] shrink-0 sticky top-0 self-start -mt-8 pt-8 max-h-[calc(100vh-5rem)] overflow-y-auto pr-1 space-y-4","data-testid":"invoke-list",children:[ne,e.jsx(te,{configs:c,selectedType:m,onSelect:s=>u(s.workflow_type),tierMap:w,activeTypes:y,search:o,activeQueue:f,compact:!0})]}),e.jsx("section",{className:"flex-1 min-w-0",children:v})]})]})}function ve(){return e.jsx(oe,{})}export{ve as DurableInvokePage,oe as StartWorkflowPage};
2
+ //# sourceMappingURL=index-B_XV1rwu.js.map