@runweave/server-linux-x64 0.1.8 → 0.1.10

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 (357) hide show
  1. package/manifest.json +1494 -161
  2. package/native.tar.gz +0 -0
  3. package/package.json +1 -1
  4. package/payload/.agents/plugins/marketplace.json +20 -0
  5. package/payload/app-server/build-info.json +4 -4
  6. package/payload/app-server/index.cjs +6 -2
  7. package/payload/app-server/index.cjs.map +1 -1
  8. package/payload/backend/activity-sqlite-worker.cjs +2 -0
  9. package/payload/backend/build-info.json +4 -4
  10. package/payload/backend/dev-resources/control.cjs +5 -1
  11. package/payload/backend/index.cjs +466 -295
  12. package/payload/backend/ios-simulators/pool.py +3 -3
  13. package/payload/backend/scheduled-tasks-sqlite-worker.cjs +2 -0
  14. package/payload/frontend/dist/assets/{_baseUniq-vo4uuhMd.js → _baseUniq--CWv8e7O.js} +1 -1
  15. package/payload/frontend/dist/assets/{access-_jCu7Rgu.js → access-BCF23Qto.js} +1 -1
  16. package/payload/frontend/dist/assets/{advanced-CqOhObYj.js → advanced-D8viCLue.js} +1 -1
  17. package/payload/frontend/dist/assets/{appearance-CrrD5gzC.js → appearance-wPVMx-tB.js} +1 -1
  18. package/payload/frontend/dist/assets/{arc-dbfyHSF0.js → arc-BXffHD7A.js} +1 -1
  19. package/payload/frontend/dist/assets/{architectureDiagram-Q4EWVU46-CntSCAsO.js → architectureDiagram-Q4EWVU46-BXHN9QCj.js} +1 -1
  20. package/payload/frontend/dist/assets/{blockDiagram-DXYQGD6D-Chp0D4qy.js → blockDiagram-DXYQGD6D-DoZjab_0.js} +1 -1
  21. package/payload/frontend/dist/assets/{c4Diagram-AHTNJAMY-CF91pOuW.js → c4Diagram-AHTNJAMY-Ds2E62Z8.js} +1 -1
  22. package/payload/frontend/dist/assets/channel-83CTXkVl.js +1 -0
  23. package/payload/frontend/dist/assets/{chunk-4BX2VUAB-B1gxlVu2.js → chunk-4BX2VUAB-Dk1H2-5_.js} +1 -1
  24. package/payload/frontend/dist/assets/{chunk-4TB4RGXK-Cxt3mj9b.js → chunk-4TB4RGXK-Sg0gzSvg.js} +1 -1
  25. package/payload/frontend/dist/assets/{chunk-55IACEB6-BJT6qNik.js → chunk-55IACEB6-Du_EJG4S.js} +1 -1
  26. package/payload/frontend/dist/assets/{chunk-EDXVE4YY-yI59bCa0.js → chunk-EDXVE4YY-BM1Cs5dU.js} +1 -1
  27. package/payload/frontend/dist/assets/{chunk-FMBD7UC4-CDvncKKJ.js → chunk-FMBD7UC4-BM9thfyY.js} +1 -1
  28. package/payload/frontend/dist/assets/{chunk-OYMX7WX6-BblOIU57.js → chunk-OYMX7WX6-C9Bvn4fo.js} +1 -1
  29. package/payload/frontend/dist/assets/{chunk-QZHKN3VN-rODzNdO0.js → chunk-QZHKN3VN-CaakbFhJ.js} +1 -1
  30. package/payload/frontend/dist/assets/{chunk-YZCP3GAM-B6D4wQwk.js → chunk-YZCP3GAM-DkVNrd40.js} +1 -1
  31. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-oR8IYJwC.js +1 -0
  32. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-oR8IYJwC.js +1 -0
  33. package/payload/frontend/dist/assets/clone-BIDF-bd9.js +1 -0
  34. package/payload/frontend/dist/assets/connection-DIdF_3aa.js +12 -0
  35. package/payload/frontend/dist/assets/{connections-DqDmxS-O.js → connections-DBYC8SFl.js} +1 -1
  36. package/payload/frontend/dist/assets/{cose-bilkent-S5V4N54A-BvwVWp29.js → cose-bilkent-S5V4N54A-B4-fwllY.js} +1 -1
  37. package/payload/frontend/dist/assets/{dagre-KV5264BT-h_K1TH11.js → dagre-KV5264BT-Byu4wqLk.js} +1 -1
  38. package/payload/frontend/dist/assets/{desktop-BQ3kGtKG.js → desktop-aESkh0HL.js} +1 -1
  39. package/payload/frontend/dist/assets/{diagram-5BDNPKRD-B8g2SV6L.js → diagram-5BDNPKRD-DJW8DuCX.js} +1 -1
  40. package/payload/frontend/dist/assets/{diagram-G4DWMVQ6-BOEnrqYm.js → diagram-G4DWMVQ6-DTBvds5J.js} +1 -1
  41. package/payload/frontend/dist/assets/{diagram-MMDJMWI5-DlaN_z71.js → diagram-MMDJMWI5-D42e4xzm.js} +1 -1
  42. package/payload/frontend/dist/assets/{diagram-TYMM5635-C_pSKftn.js → diagram-TYMM5635-BjV43-C_.js} +1 -1
  43. package/payload/frontend/dist/assets/{erDiagram-SMLLAGMA-C2dL-h3I.js → erDiagram-SMLLAGMA-DE47Ibp_.js} +1 -1
  44. package/payload/frontend/dist/assets/{flowDiagram-DWJPFMVM-BmXhKWFj.js → flowDiagram-DWJPFMVM-CjGBlzS4.js} +1 -1
  45. package/payload/frontend/dist/assets/{ganttDiagram-T4ZO3ILL-D_Odnssf.js → ganttDiagram-T4ZO3ILL-vfj40KZi.js} +1 -1
  46. package/payload/frontend/dist/assets/{gitGraphDiagram-UUTBAWPF-DcQdcwKZ.js → gitGraphDiagram-UUTBAWPF-DT5xfRNb.js} +1 -1
  47. package/payload/frontend/dist/assets/{graph-C_XsxefA.js → graph-D-AF6yQT.js} +1 -1
  48. package/payload/frontend/dist/assets/{image-D3hgVr8O.js → image-D9gtSsD9.js} +1 -1
  49. package/payload/frontend/dist/assets/{index-CEUsFFQq.js → index-BPVP2P-2.js} +95 -105
  50. package/payload/frontend/dist/assets/{infoDiagram-42DDH7IO-C6TnRyMi.js → infoDiagram-42DDH7IO-C7ew_uLJ.js} +1 -1
  51. package/payload/frontend/dist/assets/{ishikawaDiagram-UXIWVN3A-BL7rfALJ.js → ishikawaDiagram-UXIWVN3A-B6-YebU9.js} +1 -1
  52. package/payload/frontend/dist/assets/{journeyDiagram-VCZTEJTY-C_6407GW.js → journeyDiagram-VCZTEJTY-BOFgJDA5.js} +1 -1
  53. package/payload/frontend/dist/assets/{kanban-definition-6JOO6SKY-CK61Fd0p.js → kanban-definition-6JOO6SKY-jh06wZYz.js} +1 -1
  54. package/payload/frontend/dist/assets/{layout-DVn6JKbl.js → layout-B4p7V5fB.js} +1 -1
  55. package/payload/frontend/dist/assets/{linear-DyWskq8H.js → linear-D2JWfvdc.js} +1 -1
  56. package/payload/frontend/dist/assets/main-CuRgiPQf.js +706 -0
  57. package/payload/frontend/dist/assets/main-D4_uoZQa.css +33 -0
  58. package/payload/frontend/dist/assets/{min-apbLpSJ3.js → min--jD4Arnm.js} +1 -1
  59. package/payload/frontend/dist/assets/{mindmap-definition-QFDTVHPH-MVHZZbma.js → mindmap-definition-QFDTVHPH-DmzjmSuf.js} +1 -1
  60. package/payload/frontend/dist/assets/{monitoring-BApsVez_.js → monitoring-Tvvk6TfB.js} +1 -1
  61. package/payload/frontend/dist/assets/{notifications-CjxSNLU1.js → notifications-CqP2AQrW.js} +1 -1
  62. package/payload/frontend/dist/assets/{pieDiagram-DEJITSTG-Dhbb0AYU.js → pieDiagram-DEJITSTG-B79qIVe5.js} +1 -1
  63. package/payload/frontend/dist/assets/{quadrantDiagram-34T5L4WZ-Yk6LOF0S.js → quadrantDiagram-34T5L4WZ-DIOj1DhE.js} +1 -1
  64. package/payload/frontend/dist/assets/{record-content-BCJ80KS5.js → record-content-CzGGCbNs.js} +1 -1
  65. package/payload/frontend/dist/assets/{requirementDiagram-MS252O5E-BUhS0PEq.js → requirementDiagram-MS252O5E-C-n1j3tN.js} +1 -1
  66. package/payload/frontend/dist/assets/{sankeyDiagram-XADWPNL6-D2sdxz14.js → sankeyDiagram-XADWPNL6-BVKqWE6C.js} +1 -1
  67. package/payload/frontend/dist/assets/{sequenceDiagram-FGHM5R23-CRere4Fy.js → sequenceDiagram-FGHM5R23-B980Icqs.js} +1 -1
  68. package/payload/frontend/dist/assets/{stateDiagram-FHFEXIEX-_pk-OMlm.js → stateDiagram-FHFEXIEX-C-mJHzhL.js} +1 -1
  69. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-B4L4fK9G.js +1 -0
  70. package/payload/frontend/dist/assets/{status-Dk5rRVQF.js → status-Bv4Czr9-.js} +1 -1
  71. package/payload/frontend/dist/assets/suiji-DyzQqRTE.js +1 -0
  72. package/payload/frontend/dist/assets/{svg-X7YkMMvx.js → svg-C6Aj62ig.js} +1 -1
  73. package/payload/frontend/dist/assets/{tabs-BmKbcPVh.js → tabs-BTUOhdAF.js} +1 -1
  74. package/payload/frontend/dist/assets/{timeline-definition-GMOUNBTQ-BPsI2pMC.js → timeline-definition-GMOUNBTQ-Dr9yRuVq.js} +1 -1
  75. package/payload/frontend/dist/assets/{vennDiagram-DHZGUBPP-BNJkZ1Az.js → vennDiagram-DHZGUBPP-B0Xsg1-Z.js} +1 -1
  76. package/payload/frontend/dist/assets/{wardley-RL74JXVD-CVcYeATS.js → wardley-RL74JXVD-BjIKKaA_.js} +1 -1
  77. package/payload/frontend/dist/assets/{wardleyDiagram-NUSXRM2D-BpLJ0alk.js → wardleyDiagram-NUSXRM2D-DMJ7MEA9.js} +1 -1
  78. package/payload/frontend/dist/assets/{xychartDiagram-5P7HB3ND-BdsYYk4M.js → xychartDiagram-5P7HB3ND-2tvgfdab.js} +1 -1
  79. package/payload/frontend/dist/build-info.json +4 -4
  80. package/payload/frontend/dist/companion.html +1 -1
  81. package/payload/frontend/dist/index.html +3 -3
  82. package/payload/packages/agent-bridge/src/install-pi.mjs +81 -0
  83. package/payload/plugins/pi/dist/SKILL.md +22 -0
  84. package/payload/plugins/pi/dist/bridge/app-server-client.cjs +82 -0
  85. package/payload/plugins/pi/dist/bridge/feishu_stop_notify.sh +169 -0
  86. package/payload/plugins/pi/dist/bridge/runweave-hook-bridge.cjs +583 -0
  87. package/payload/plugins/pi/dist/bridge/runweave-hook-completion.cjs +42 -0
  88. package/payload/plugins/pi/dist/bridge/runweave-hook-payload.cjs +578 -0
  89. package/payload/plugins/pi/dist/bridge/runweave-task-supervision.cjs +167 -0
  90. package/payload/plugins/pi/dist/runweave.js +316 -0
  91. package/payload/plugins/toolkit/.codex-plugin/plugin.json +31 -0
  92. package/payload/plugins/toolkit/README.md +185 -0
  93. package/payload/plugins/toolkit/hooks/AGENTS.md +6 -0
  94. package/payload/plugins/toolkit/hooks/app-server-client.cjs +82 -0
  95. package/payload/plugins/toolkit/hooks/feishu_stop_notify.sh +169 -0
  96. package/payload/plugins/toolkit/hooks/runweave-hook-bridge.cjs +583 -0
  97. package/payload/plugins/toolkit/hooks/runweave-hook-completion.cjs +42 -0
  98. package/payload/plugins/toolkit/hooks/runweave-hook-dispatch.cjs +123 -0
  99. package/payload/plugins/toolkit/hooks/runweave-hook-payload.cjs +578 -0
  100. package/payload/plugins/toolkit/hooks/runweave-task-supervision.cjs +167 -0
  101. package/payload/plugins/toolkit/hooks.json +108 -0
  102. package/payload/plugins/toolkit/skills/acceptance/SKILL.md +70 -0
  103. package/payload/plugins/toolkit/skills/acceptance/agents/openai.yaml +4 -0
  104. package/payload/plugins/toolkit/skills/acceptance/references/capture.md +38 -0
  105. package/payload/plugins/toolkit/skills/acceptance/references/delivery.md +54 -0
  106. package/payload/plugins/toolkit/skills/acceptance/references/gallery-contract.md +84 -0
  107. package/payload/plugins/toolkit/skills/acceptance/references/gallery-copy.md +34 -0
  108. package/payload/plugins/toolkit/skills/acceptance/references/video.md +52 -0
  109. package/payload/plugins/toolkit/skills/acceptance/scripts/capture.py +137 -0
  110. package/payload/plugins/toolkit/skills/acceptance/scripts/common.py +63 -0
  111. package/payload/plugins/toolkit/skills/acceptance/scripts/gallery.py +353 -0
  112. package/payload/plugins/toolkit/skills/acceptance/scripts/preview.py +109 -0
  113. package/payload/plugins/toolkit/skills/acceptance/scripts/video.py +283 -0
  114. package/payload/plugins/toolkit/skills/acceptance/templates/reader.css +576 -0
  115. package/payload/plugins/toolkit/skills/acceptance/templates/reader.html +63 -0
  116. package/payload/plugins/toolkit/skills/acceptance/templates/reader.js +326 -0
  117. package/payload/plugins/toolkit/skills/acceptance/templates/viewer.css +55 -0
  118. package/payload/plugins/toolkit/skills/acceptance-gallery/SKILL.md +8 -0
  119. package/payload/plugins/toolkit/skills/acceptance-gallery/agents/openai.yaml +6 -0
  120. package/payload/plugins/toolkit/skills/acceptance-gallery/references/capture-and-copy.md +3 -0
  121. package/payload/plugins/toolkit/skills/acceptance-gallery/references/content-contract.md +3 -0
  122. package/payload/plugins/toolkit/skills/acceptance-gallery/scripts/gallery.py +9 -0
  123. package/payload/plugins/toolkit/skills/acceptance-video/SKILL.md +8 -0
  124. package/payload/plugins/toolkit/skills/acceptance-video/agents/openai.yaml +6 -0
  125. package/payload/plugins/toolkit/skills/acceptance-video/references/input-and-capture.md +3 -0
  126. package/payload/plugins/toolkit/skills/acceptance-video/references/mobile-review.md +3 -0
  127. package/payload/plugins/toolkit/skills/acceptance-video/scripts/capture.py +9 -0
  128. package/payload/plugins/toolkit/skills/acceptance-video/scripts/video.py +9 -0
  129. package/payload/plugins/toolkit/skills/agent-device/SKILL.md +86 -0
  130. package/payload/plugins/toolkit/skills/agent-device/agents/openai.yaml +4 -0
  131. package/payload/plugins/toolkit/skills/agent-device/references/ios-setup.md +36 -0
  132. package/payload/plugins/toolkit/skills/agent-device/scripts/device.py +398 -0
  133. package/payload/plugins/toolkit/skills/agent-device/scripts/resources.py +248 -0
  134. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/SKILL.md +128 -0
  135. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/agents/openai.yaml +4 -0
  136. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-checklist.md +59 -0
  137. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-guide.md +135 -0
  138. package/payload/plugins/toolkit/skills/architecture-flow-prototyping/references/architecture-flow-handoff-template.md +57 -0
  139. package/payload/plugins/toolkit/skills/ask-first/SKILL.md +81 -0
  140. package/payload/plugins/toolkit/skills/brainstorming/SKILL.md +41 -0
  141. package/payload/plugins/toolkit/skills/browse-record/SKILL.md +35 -0
  142. package/payload/plugins/toolkit/skills/browse-record/references/app-usage.md +19 -0
  143. package/payload/plugins/toolkit/skills/browse-record/references/daily-reporting.md +115 -0
  144. package/payload/plugins/toolkit/skills/browse-record/references/zhihu.md +33 -0
  145. package/payload/plugins/toolkit/skills/browse-record/scripts/app_usage.py +110 -0
  146. package/payload/plugins/toolkit/skills/browse-record/scripts/browse_job.py +385 -0
  147. package/payload/plugins/toolkit/skills/browse-record/scripts/zhihu-read.js +126 -0
  148. package/payload/plugins/toolkit/skills/browse-record/scripts/zhihu_http.py +273 -0
  149. package/payload/plugins/toolkit/skills/clear-technical-explanations/LICENSE +21 -0
  150. package/payload/plugins/toolkit/skills/clear-technical-explanations/SKILL.md +103 -0
  151. package/payload/plugins/toolkit/skills/code-grounded-requirements/SKILL.md +54 -0
  152. package/payload/plugins/toolkit/skills/daily-doc-maintenance/SKILL.md +151 -0
  153. package/payload/plugins/toolkit/skills/daily-record/SKILL.md +63 -0
  154. package/payload/plugins/toolkit/skills/daily-record/agents/openai.yaml +4 -0
  155. package/payload/plugins/toolkit/skills/daily-record/references/browser-history.md +6 -0
  156. package/payload/plugins/toolkit/skills/daily-record/references/feishu.md +90 -0
  157. package/payload/plugins/toolkit/skills/daily-record/references/scheduled-reporting.md +144 -0
  158. package/payload/plugins/toolkit/skills/daily-record/references/scheduled-task.template.json +15 -0
  159. package/payload/plugins/toolkit/skills/daily-record/references/suiji-work-records.md +57 -0
  160. package/payload/plugins/toolkit/skills/daily-record/scripts/feishu.py +280 -0
  161. package/payload/plugins/toolkit/skills/daily-record/scripts/job.py +416 -0
  162. package/payload/plugins/toolkit/skills/daily-record/scripts/job_browser.py +77 -0
  163. package/payload/plugins/toolkit/skills/daily-record/scripts/job_facts.py +132 -0
  164. package/payload/plugins/toolkit/skills/daily-record/scripts/job_isolation.py +69 -0
  165. package/payload/plugins/toolkit/skills/daily-record/scripts/job_materials.py +154 -0
  166. package/payload/plugins/toolkit/skills/daily-record/scripts/job_screen.py +77 -0
  167. package/payload/plugins/toolkit/skills/daily-record/scripts/job_state.py +309 -0
  168. package/payload/plugins/toolkit/skills/daily-refactor/SKILL.md +101 -0
  169. package/payload/plugins/toolkit/skills/daily-refactor/scripts/compare-architecture-reports.mjs +168 -0
  170. package/payload/plugins/toolkit/skills/debugging-strategies/SKILL.md +38 -0
  171. package/payload/plugins/toolkit/skills/debugging-strategies/resources/implementation-playbook.md +520 -0
  172. package/payload/plugins/toolkit/skills/diagnostic-log-debugging/SKILL.md +79 -0
  173. package/payload/plugins/toolkit/skills/doc-coauthoring/SKILL.md +64 -0
  174. package/payload/plugins/toolkit/skills/eli5/LICENSE +21 -0
  175. package/payload/plugins/toolkit/skills/eli5/SKILL.md +18 -0
  176. package/payload/plugins/toolkit/skills/experience/SKILL.md +71 -0
  177. package/payload/plugins/toolkit/skills/experience/package.json +13 -0
  178. package/payload/plugins/toolkit/skills/git-advanced-workflows/SKILL.md +457 -0
  179. package/payload/plugins/toolkit/skills/github-pr/SKILL.md +109 -0
  180. package/payload/plugins/toolkit/skills/github-pr/scripts/github-access.mjs +292 -0
  181. package/payload/plugins/toolkit/skills/github-pr/scripts/preflight.mjs +191 -0
  182. package/payload/plugins/toolkit/skills/github-pr/scripts/source-worktree.mjs +354 -0
  183. package/payload/plugins/toolkit/skills/grill-with-docs/SKILL.md +66 -0
  184. package/payload/plugins/toolkit/skills/grill-with-docs/agents/openai.yaml +6 -0
  185. package/payload/plugins/toolkit/skills/grilling/SKILL.md +14 -0
  186. package/payload/plugins/toolkit/skills/handoff/SKILL.md +98 -0
  187. package/payload/plugins/toolkit/skills/karpathy-guidelines/SKILL.md +73 -0
  188. package/payload/plugins/toolkit/skills/playwright-cli/SKILL.md +562 -0
  189. package/payload/plugins/toolkit/skills/playwright-cli/references/element-attributes.md +23 -0
  190. package/payload/plugins/toolkit/skills/playwright-cli/references/playwright-tests.md +39 -0
  191. package/payload/plugins/toolkit/skills/playwright-cli/references/request-mocking.md +87 -0
  192. package/payload/plugins/toolkit/skills/playwright-cli/references/running-code.md +240 -0
  193. package/payload/plugins/toolkit/skills/playwright-cli/references/session-management.md +226 -0
  194. package/payload/plugins/toolkit/skills/playwright-cli/references/spec-driven-testing.md +312 -0
  195. package/payload/plugins/toolkit/skills/playwright-cli/references/storage-state.md +275 -0
  196. package/payload/plugins/toolkit/skills/playwright-cli/references/test-generation.md +138 -0
  197. package/payload/plugins/toolkit/skills/playwright-cli/references/tracing.md +142 -0
  198. package/payload/plugins/toolkit/skills/playwright-cli/references/video-recording.md +157 -0
  199. package/payload/plugins/toolkit/skills/playwright-cli/templates/standalone.config.json +7 -0
  200. package/payload/plugins/toolkit/skills/product-exploration/SKILL.md +64 -0
  201. package/payload/plugins/toolkit/skills/product-exploration/agents/openai.yaml +5 -0
  202. package/payload/plugins/toolkit/skills/prototype-first-development/SKILL.md +134 -0
  203. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/README.md +88 -0
  204. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/app.js +145 -0
  205. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/index.html +229 -0
  206. package/payload/plugins/toolkit/skills/prototype-first-development/references/html-prototype-template/mock-state.json +60 -0
  207. package/payload/plugins/toolkit/skills/prototype-first-development/references/implementation-plan-handoff-template.md +61 -0
  208. package/payload/plugins/toolkit/skills/prototype-first-development/references/prototype-workflow-checklist.md +64 -0
  209. package/payload/plugins/toolkit/skills/publish-runweave-server/SKILL.md +69 -0
  210. package/payload/plugins/toolkit/skills/publish-runweave-server/agents/openai.yaml +4 -0
  211. package/payload/plugins/toolkit/skills/react-best-practices/AGENTS.md +3227 -0
  212. package/payload/plugins/toolkit/skills/react-best-practices/README.md +127 -0
  213. package/payload/plugins/toolkit/skills/react-best-practices/SKILL.md +143 -0
  214. package/payload/plugins/toolkit/skills/react-best-practices/metadata.json +15 -0
  215. package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/event-handler-refs.md +55 -0
  216. package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/init-once.md +42 -0
  217. package/payload/plugins/toolkit/skills/react-best-practices/rules/advanced/use-latest.md +39 -0
  218. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/api-routes.md +38 -0
  219. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/defer-await.md +80 -0
  220. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/dependencies.md +52 -0
  221. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/parallel.md +28 -0
  222. package/payload/plugins/toolkit/skills/react-best-practices/rules/async/suspense-boundaries.md +99 -0
  223. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/barrel-imports.md +59 -0
  224. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/conditional.md +37 -0
  225. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/defer-third-party.md +49 -0
  226. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/dynamic-imports.md +35 -0
  227. package/payload/plugins/toolkit/skills/react-best-practices/rules/bundle/preload.md +46 -0
  228. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/event-listeners.md +78 -0
  229. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/localstorage-schema.md +77 -0
  230. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/passive-event-listeners.md +48 -0
  231. package/payload/plugins/toolkit/skills/react-best-practices/rules/client/swr-dedup.md +56 -0
  232. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/batch-dom-css.md +110 -0
  233. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-function-results.md +80 -0
  234. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-property-access.md +28 -0
  235. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/cache-storage.md +70 -0
  236. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/combine-iterations.md +32 -0
  237. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/early-exit.md +50 -0
  238. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/flatmap-filter.md +55 -0
  239. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/hoist-regexp.md +45 -0
  240. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/index-maps.md +37 -0
  241. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/length-check-first.md +50 -0
  242. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/min-max-loop.md +82 -0
  243. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/set-map-lookups.md +24 -0
  244. package/payload/plugins/toolkit/skills/react-best-practices/rules/js/tosorted-immutable.md +57 -0
  245. package/payload/plugins/toolkit/skills/react-best-practices/rules/meta/sections.md +46 -0
  246. package/payload/plugins/toolkit/skills/react-best-practices/rules/meta/template.md +28 -0
  247. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/activity.md +26 -0
  248. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/animate-svg-wrapper.md +38 -0
  249. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/conditional-render.md +32 -0
  250. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/content-visibility.md +38 -0
  251. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hoist-jsx.md +36 -0
  252. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hydration-no-flicker.md +72 -0
  253. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/hydration-suppress-warning.md +26 -0
  254. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/resource-hints.md +89 -0
  255. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/script-defer-async.md +71 -0
  256. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/svg-precision.md +28 -0
  257. package/payload/plugins/toolkit/skills/react-best-practices/rules/rendering/usetransition-loading.md +75 -0
  258. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/defer-reads.md +39 -0
  259. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/dependencies.md +45 -0
  260. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/derived-state-no-effect.md +40 -0
  261. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/derived-state.md +29 -0
  262. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/functional-setstate.md +77 -0
  263. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/lazy-state-init.md +58 -0
  264. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/memo-with-default-value.md +36 -0
  265. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/memo.md +44 -0
  266. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/move-effect-to-event.md +45 -0
  267. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/no-inline-components.md +83 -0
  268. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/simple-expression-in-memo.md +35 -0
  269. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/transitions.md +40 -0
  270. package/payload/plugins/toolkit/skills/react-best-practices/rules/rerender/use-ref-transient-values.md +73 -0
  271. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/after-nonblocking.md +74 -0
  272. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/auth-actions.md +96 -0
  273. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/cache-lru.md +41 -0
  274. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/cache-react.md +76 -0
  275. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/dedup-props.md +65 -0
  276. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/hoist-static-io.md +139 -0
  277. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/parallel-fetching.md +83 -0
  278. package/payload/plugins/toolkit/skills/react-best-practices/rules/server/serialization.md +38 -0
  279. package/payload/plugins/toolkit/skills/recorded-browser-mcp-verification/SKILL.md +8 -0
  280. package/payload/plugins/toolkit/skills/recorded-browser-mcp-verification/agents/openai.yaml +6 -0
  281. package/payload/plugins/toolkit/skills/reproduce-before-fix/SKILL.md +93 -0
  282. package/payload/plugins/toolkit/skills/reproduce-before-fix/agents/openai.yaml +7 -0
  283. package/payload/plugins/toolkit/skills/review-only/SKILL.md +72 -0
  284. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/SKILL.md +134 -0
  285. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/agents/openai.yaml +7 -0
  286. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/references/contracts.md +114 -0
  287. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/classify-runtime-verdict.mjs +140 -0
  288. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/run-static-review.mjs +389 -0
  289. package/payload/plugins/toolkit/skills/review-with-runtime-evidence/scripts/static-review-contract.mjs +243 -0
  290. package/payload/plugins/toolkit/skills/run-test-cases/SKILL.md +63 -0
  291. package/payload/plugins/toolkit/skills/runweave-change-validation/SKILL.md +196 -0
  292. package/payload/plugins/toolkit/skills/runweave-change-validation/agents/openai.yaml +7 -0
  293. package/payload/plugins/toolkit/skills/runweave-change-validation/scripts/assert-dev-session-status.mjs +181 -0
  294. package/payload/plugins/toolkit/skills/runweave-dev-session/SKILL.md +126 -0
  295. package/payload/plugins/toolkit/skills/runweave-dev-session/agents/openai.yaml +7 -0
  296. package/payload/plugins/toolkit/skills/runweave-management/SKILL.md +47 -0
  297. package/payload/plugins/toolkit/skills/scheduled-task/SKILL.md +35 -0
  298. package/payload/plugins/toolkit/skills/shadcn/SKILL.md +245 -0
  299. package/payload/plugins/toolkit/skills/shadcn/agents/openai.yml +5 -0
  300. package/payload/plugins/toolkit/skills/shadcn/assets/shadcn-small.png +0 -0
  301. package/payload/plugins/toolkit/skills/shadcn/assets/shadcn.png +0 -0
  302. package/payload/plugins/toolkit/skills/shadcn/cli.md +276 -0
  303. package/payload/plugins/toolkit/skills/shadcn/customization.md +209 -0
  304. package/payload/plugins/toolkit/skills/shadcn/evals/evals.json +47 -0
  305. package/payload/plugins/toolkit/skills/shadcn/mcp.md +94 -0
  306. package/payload/plugins/toolkit/skills/shadcn/rules/base-vs-radix.md +310 -0
  307. package/payload/plugins/toolkit/skills/shadcn/rules/composition.md +197 -0
  308. package/payload/plugins/toolkit/skills/shadcn/rules/forms.md +198 -0
  309. package/payload/plugins/toolkit/skills/shadcn/rules/icons.md +101 -0
  310. package/payload/plugins/toolkit/skills/shadcn/rules/styling.md +163 -0
  311. package/payload/plugins/toolkit/skills/suiji/SKILL.md +54 -0
  312. package/payload/plugins/toolkit/skills/suiji/references/api.md +72 -0
  313. package/payload/plugins/toolkit/skills/suiji/references/source-adapter.md +40 -0
  314. package/payload/plugins/toolkit/skills/suiji/references/work-records.md +36 -0
  315. package/payload/plugins/toolkit/skills/suiji/scripts/source_adapter.py +46 -0
  316. package/payload/plugins/toolkit/skills/suiji/scripts/suiji.py +358 -0
  317. package/payload/plugins/toolkit/skills/suiji/scripts/work_records.py +328 -0
  318. package/payload/plugins/toolkit/skills/suiji/scripts/work_reports.py +75 -0
  319. package/payload/plugins/toolkit/skills/sync-branch-hard-reset/SKILL.md +59 -0
  320. package/payload/plugins/toolkit/skills/update-runweave-backend/SKILL.md +90 -0
  321. package/payload/plugins/toolkit/skills/update-runweave-backend/agents/openai.yaml +4 -0
  322. package/payload/plugins/toolkit/skills/update-runweave-backend/references/npm-update.md +68 -0
  323. package/payload/plugins/toolkit/skills/update-runweave-backend/references/systemd.md +34 -0
  324. package/payload/plugins/toolkit/skills/update-runweave-desktop/SKILL.md +102 -0
  325. package/payload/plugins/toolkit/skills/update-runweave-ios/SKILL.md +16 -0
  326. package/payload/plugins/toolkit/skills/update-runweave-ios/references/ios-wireless-recovery.md +54 -0
  327. package/payload/plugins/toolkit/skills/using-rw/SKILL.md +265 -0
  328. package/payload/plugins/toolkit/skills/write-plan/SKILL.md +72 -0
  329. package/payload/plugins/toolkit/skills/write-test-cases/SKILL.md +100 -0
  330. package/payload/plugins/toolkit/skills/write-test-cases/assets/test-plan-template.yaml +15 -0
  331. package/payload/plugins/toolkit/skills/write-test-cases/references/coverage-checklist.md +75 -0
  332. package/payload/plugins/toolkit/skills/write-test-cases/references/design-techniques.md +91 -0
  333. package/payload/plugins/toolkit/skills/youtube-reading/SKILL.md +35 -0
  334. package/payload/plugins/toolkit/skills/youtube-reading/agents/openai.yaml +4 -0
  335. package/payload/plugins/toolkit/skills/youtube-reading/assets/runtime-lock.json +92 -0
  336. package/payload/plugins/toolkit/skills/youtube-reading/references/content-contract.md +52 -0
  337. package/payload/plugins/toolkit/skills/youtube-reading/references/setup.md +70 -0
  338. package/payload/plugins/toolkit/skills/youtube-reading/requirements.lock +9 -0
  339. package/payload/plugins/toolkit/skills/youtube-reading/scripts/artifacts.py +206 -0
  340. package/payload/plugins/toolkit/skills/youtube-reading/scripts/runtime.py +424 -0
  341. package/payload/plugins/toolkit/skills/youtube-reading/scripts/youtube_reading.py +314 -0
  342. package/payload/plugins/toolkit-release.json +1 -0
  343. package/payload/pty-host/index.cjs +99 -31
  344. package/payload/scripts/toolkit/codex-state.mjs +75 -0
  345. package/payload/scripts/toolkit/release.mjs +210 -0
  346. package/payload/scripts/toolkit/sync-runtime.mjs +108 -0
  347. package/payload/scripts/toolkit/sync.mjs +585 -0
  348. package/payload/server/index.cjs +5 -1
  349. package/payload/frontend/dist/assets/channel-Bf3IeONI.js +0 -1
  350. package/payload/frontend/dist/assets/classDiagram-6PBFFD2Q-CFsG2SvG.js +0 -1
  351. package/payload/frontend/dist/assets/classDiagram-v2-HSJHXN6E-CFsG2SvG.js +0 -1
  352. package/payload/frontend/dist/assets/clone-CeQXm2YN.js +0 -1
  353. package/payload/frontend/dist/assets/connection-XriXysSc.js +0 -12
  354. package/payload/frontend/dist/assets/main-Cg6Oo1xK.css +0 -33
  355. package/payload/frontend/dist/assets/main-H5R-3_w1.js +0 -696
  356. package/payload/frontend/dist/assets/stateDiagram-v2-QKLJ7IA2-CzpdUl_0.js +0 -1
  357. package/payload/frontend/dist/assets/suiji-CO_L5W1X.js +0 -1
@@ -1,12 +0,0 @@
1
- var _e=Object.defineProperty;var Ge=(a,t,s)=>t in a?_e(a,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[t]=s;var B=(a,t,s)=>Ge(a,typeof t!="symbol"?t+"":t,s);import{r as x,j as e,u as A}from"./index-D9-cSGu-.js";import{s as Be,B as u,I as K,t as ee,v as Qe,w as Ze,x as Xe,y as Ye,E as et,P as tt,N as st,G as it,J as at,K as rt,h as nt,r as ot,O as lt,X as ct,Q as ke}from"./main-H5R-3_w1.js";import{S as Fe,r as pe,R as Ce,a as Me}from"./record-content-BCJ80KS5.js";/**
2
- * @license lucide-react v0.484.0 - ISC
3
- *
4
- * This source code is licensed under the ISC license.
5
- * See the LICENSE file in the root directory of this source tree.
6
- */const dt=[["path",{d:"M12 12h.01",key:"1mp3jc"}],["path",{d:"M16 6V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v2",key:"1ksdt3"}],["path",{d:"M22 13a18.15 18.15 0 0 1-20 0",key:"12hx5q"}],["rect",{width:"20",height:"14",x:"2",y:"6",rx:"2",key:"i6l2r4"}]],ut=Be("briefcase-business",dt);/**
7
- * @license lucide-react v0.484.0 - ISC
8
- *
9
- * This source code is licensed under the ISC license.
10
- * See the LICENSE file in the root directory of this source tree.
11
- */const ht=[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]],pt=Be("list-checks",ht);function ft({report:a,onOpen:t}){const s=a.days.filter(i=>i.coverage!=="complete");return e.jsxs("button",{type:"button",onClick:t,className:"rounded-2xl border border-emerald-600/40 bg-emerald-50/40 p-4 text-left dark:bg-emerald-950/20",children:[e.jsxs("p",{className:"mb-2 text-xs font-medium text-emerald-700 dark:text-emerald-400",children:["周报 · ",a.from," — ",a.to]}),e.jsx("h3",{className:"mb-2 font-semibold",children:a.title}),e.jsx("p",{className:"line-clamp-2 whitespace-pre-wrap text-sm leading-7",children:a.body.replace(/[#*]/g,"")}),e.jsxs("p",{className:"mt-3 text-xs text-muted-foreground",children:[s.length?`${s.length} 天来源尚未齐全 · `:"","查看完整周报 →"]})]})}function xt({original:a,model:t,writable:s,onClose:i,onLogs:r}){const[n,d]=x.useState(a),[l,c]=x.useState(),[f,p]=x.useState(!1),[m,o]=x.useState(!1),[v,k]=x.useState(""),E="work:report:"+a.id;x.useEffect(()=>{let j=!0;return Promise.all([t.client.request("/api/suiji/v1/work-reports/"+a.id),t.store.get(E)]).then(([w,C])=>{j&&t.client.active&&(d(w.report),c(C))},w=>{j&&k(String(w))}),()=>{j=!1}},[a.id,t,E]);const g=async j=>{t.client.active&&c(j),await t.persistReportDraft(E,j)},b=async()=>{try{l||await g({title:n.title,body:n.body,version:n.version}),p(!0)}catch(j){k(String(j))}},S=async()=>{if(!l||m||!s)return;o(!0),k("");let j=l;try{if(!j.pending){if(!j.title.trim()||[...j.title.trim()].length>80||!j.body.trim()||[...j.body].length>2e4)throw new Error("标题1–80字,正文1–20000字");j={...j,pending:{path:"/api/suiji/v1/work-reports/"+n.id,method:"PATCH",key:crypto.randomUUID(),data:{title:j.title.trim(),body:j.body,expectedVersion:j.version}}},await g(j)}const w=j.pending,C=await t.client.request(w.path,w.method,w.data,w.key),R=w.data;if(C.report.id!==n.id||C.report.body!==R.body||C.report.title!==R.title||C.report.version!==R.expectedVersion+1)throw new Error("保存回执不匹配,请手动确认原请求");await t.clearReportDraft(E),t.client.active&&(d(C.report),c(void 0),p(!1),await t.load())}catch(w){w instanceof ee&&!w.uncertain&&await g({...j,pending:void 0}),t.client.active&&k(String(w))}finally{t.client.active&&o(!1)}};return e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col","aria-label":"周报详情",children:[e.jsxs("header",{className:"flex items-center justify-between border-b p-4",children:[e.jsx(u,{variant:"ghost",disabled:m,onClick:i,children:"返回工作"}),e.jsx("span",{children:"周报"}),e.jsx(u,{variant:"ghost",disabled:m||!s,onClick:()=>void(f?S():b()),children:f?l!=null&&l.pending?"手动确认原请求":"保存":"编辑周报"})]}),e.jsxs("div",{className:"flex-1 space-y-4 overflow-y-auto p-5",children:[v&&e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:v}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[n.from," — ",n.to," · 七个自然日"]}),n.needsReview?e.jsx("p",{className:"text-sm text-amber-600",children:"来源含历史浏览内容,此周报待人工复核。"}):null,e.jsxs("p",{className:"text-xs text-muted-foreground",children:["根据 ",n.sourceFacts.length," 条工作事实整理",n.manuallyEdited?" · 已人工编辑":""]}),n.days.some(j=>j.coverage!=="complete")&&e.jsxs("p",{className:"rounded-xl bg-amber-50 p-3 text-sm text-amber-900",children:["来源未齐:",n.days.filter(j=>j.coverage!=="complete").map(j=>j.date).join("、"),"。未上报不代表没有工作。"]}),f&&l?e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"block text-sm",children:["周报标题",e.jsx(K,{"aria-label":"周报标题",value:l.title,disabled:m||!!l.pending,onChange:j=>void g({...l,title:j.target.value}).catch(w=>k(String(w)))})]}),e.jsxs("label",{className:"block text-sm",children:["周报正文",e.jsx("textarea",{"aria-label":"周报正文",className:"min-h-80 w-full rounded-xl border bg-background p-3",value:l.body,disabled:m||!!l.pending,onChange:j=>void g({...l,body:j.target.value}).catch(w=>k(String(w)))})]}),l.pending?e.jsx("p",{children:"保存结果待确认,返回或重启不会自动发送。"}):e.jsx(u,{variant:"outline",onClick:()=>{t.client.request("/api/suiji/v1/work-reports/"+n.id).then(async j=>{d(j.report),await g({...l,version:j.report.version}),k("已更新版本,保留草稿,请核对后保存。")},j=>k(String(j)))},children:"读取最新版本并保留草稿"})]}):e.jsxs(e.Fragment,{children:[e.jsx("h2",{className:"text-xl font-semibold",children:n.title}),e.jsx("div",{className:"whitespace-pre-wrap break-words leading-8",children:n.body})]})]}),e.jsx("footer",{className:"border-t p-4",children:e.jsx(u,{variant:"outline",disabled:m,onClick:r,children:"查看原始日志"})})]})}const Ne={progress:"有进展",discussed:"讨论",documented:"已记录",attempted:"尝试","agent-reported":"Agent 反馈",verified:"已验证"},Ue=()=>new Intl.DateTimeFormat("en-CA",{timeZone:"Asia/Shanghai",year:"numeric",month:"2-digit",day:"2-digit"}).format(new Date),ne="/api/suiji/v1/work-facts",H=a=>a instanceof Error?a.message:"操作失败";class mt{constructor(t,s,i=!1){B(this,"state",{items:[],reports:[],view:"all",days:[],cursor:null,from:"",to:"",loading:!1,busy:!1,error:""});B(this,"listeners",new Set);B(this,"generation",0);B(this,"alive",!0);B(this,"writable",!1);B(this,"read");B(this,"writes",Promise.resolve());B(this,"subscribe",t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}));B(this,"snapshot",()=>this.state);this.client=t,this.store=s,this.reportsSupported=i}set(t){this.alive&&this.client.active&&(this.state={...this.state,...t},this.listeners.forEach(s=>s()))}persist(t,s){const i=structuredClone(s),r=this.writes.catch(()=>{}).then(()=>this.store.set(t,i));return this.writes=r,r}dispose(){var t;this.alive=!1,++this.generation,(t=this.read)==null||t.abort()}async settled(){await this.writes.catch(()=>{})}async initialize(){this.alive=!0;try{const[t,s,i]=await Promise.all([this.store.get("work:dates"),this.store.get("work:reclassify:active"),this.store.get("work:reclassify:undo")]),r=s?await this.store.get("work:reclassify:"+s):void 0;this.set({...t??{},batch:r,undo:i}),await this.load()}catch(t){this.set({error:H(t)})}}async load(t=!1,s=!0){var f;if(t&&(!this.state.cursor||this.state.loading))return;(f=this.read)==null||f.abort(),this.read=new AbortController;const i=++this.generation,{from:r,to:n,cursor:d,view:l}=this.state;this.set({loading:!0,error:"",...t?{}:{items:[],reports:[],days:[],cursor:null}});const c=new URLSearchParams({...this.reportsSupported?{view:l}:{},...r?{from:r}:{},...n?{to:n}:{},...t&&d?{cursor:d}:{}});try{const p=await this.client.request(ne+"?"+c,"GET",void 0,void 0,this.read.signal);if(!this.alive||i!==this.generation)return;const m=t?Object.values(Object.fromEntries([...this.state.days,...p.days].map(o=>[o.date,o]))):p.days;this.set({items:t?[...this.state.items,...p.items]:p.items,reports:t?[...this.state.reports,...p.reports??[]]:p.reports??[],days:m,cursor:p.nextCursor})}catch(p){if(!this.alive||i!==this.generation)return;if(p instanceof ee&&p.detail.error.code==="WORK_FEED_CHANGED"&&s){await this.load(!1,!1);return}this.set({error:H(p)})}finally{i===this.generation&&this.set({loading:!1})}}persistReportDraft(t,s){return this.persist(t,s)}async clearReportDraft(t){await this.writes,await this.store.remove(t)}async show(t,s=this.state.from,i=this.state.to){this.set({view:t}),await this.dates(s,i)}async dates(t,s){if(t&&s&&t>s){this.set({error:"开始日期不能晚于结束日期"});return}await this.persist("work:dates",{from:t,to:s}),this.set({from:t,to:s}),await this.load()}async detail(t){try{const s=await this.client.request(ne+"/"+t);this.set({detail:s.fact})}catch(s){this.set({error:H(s)})}}closeDetail(){this.set({detail:void 0})}async edit(t){try{await this.writes;const s=(t==null?void 0:t.id)??"new",i=s==="new"?"work:new":"work:edit:"+s,r=await this.store.get(i)??{id:s,fields:t?{workDate:t.workDate,title:t.title,statement:t.statement,status:t.status,project:t.project}:{workDate:Ue(),title:"",statement:"",status:"progress",project:null},...t?{base:t}:{}};await this.persist(i,r),this.set({draft:r,error:""})}catch(s){this.set({error:H(s)})}}update(t){const s=this.state.draft;if(!this.writable||!s||s.pending||this.state.busy)return;const i={...s,fields:{...s.fields,...t}};this.set({draft:i}),this.persist(i.id==="new"?"work:new":"work:edit:"+i.id,i).catch(r=>this.set({error:H(r)}))}closeEditor(){this.state.busy||this.set({draft:void 0})}async discardEditor(){const t=this.state.draft;if(!(!t||t.pending||this.state.busy))try{await this.writes,await this.store.remove(t.id==="new"?"work:new":"work:edit:"+t.id),this.set({draft:void 0})}catch(s){this.set({error:H(s)})}}async refreshVersion(){const t=this.state.draft;if(!(!(t!=null&&t.base)||t.pending||this.state.busy))try{const{fact:s}=await this.client.request(ne+"/"+t.id),i={...t,base:s};await this.persist("work:edit:"+t.id,i),this.set({draft:i,detail:s,error:"已读取当前版本,下方保留你的草稿;请核对最新事实后再保存。"})}catch(s){this.set({error:H(s)})}}async save(){var i,r;let t=this.state.draft;if(!this.writable||!t||this.state.busy)return;this.set({busy:!0,error:""});const s=t.id==="new"?"work:new":"work:edit:"+t.id;try{if(await this.writes,!t.pending){const l=t.fields;if(!l.title.trim()||!l.statement.trim()||[...l.title.trim()].length>80||[...l.statement].length>4e3||[...((i=l.project)==null?void 0:i.trim())??""].length>80||!/^\d{4}-\d\d-\d\d$/.test(l.workDate))throw new Error("请填写有效工作日期、1–80字标题及1–4000字正文;项目最多80字");const c={...l,title:l.title.trim(),project:((r=l.project)==null?void 0:r.trim())||null},f=t.base?{expectedVersion:t.base.version,...Object.fromEntries(Object.entries(c).filter(([p,m])=>m!==t.base[p]))}:c;if(t.base&&Object.keys(f).length===1){this.set({draft:void 0});return}t={...t,pending:{key:crypto.randomUUID(),method:t.base?"PATCH":"POST",path:ne+(t.base?"/"+t.id:""),data:f}},await this.persist(s,t),this.set({draft:t})}const n=t.pending,{fact:d}=await this.client.request(n.path,n.method,n.data,n.key);if(!(d!=null&&d.id)||t.base&&d.id!==t.id||Object.entries(n.data).some(([l,c])=>l!=="expectedVersion"&&d[l]!==c))throw new Error("保存回执不匹配,请手动确认原请求");await this.store.remove(s),this.set({draft:void 0,detail:d}),await this.dates(d.workDate,d.workDate)}catch(n){n instanceof ee&&!n.uncertain&&t.pending&&(t={...t,pending:void 0},await this.persist(s,t),this.set({draft:t})),this.set({error:H(n)})}finally{this.set({busy:!1})}}async beginBatch(t,s=!1){if(!(this.state.batch||this.state.busy))try{const i={id:crypto.randomUUID(),rows:t,project:"",...s?{undo:s}:{}};await this.persist("work:reclassify:"+i.id,i),await this.persist("work:reclassify:active",i.id),this.set({batch:i,error:""})}catch(i){this.set({error:H(i)})}}updateBatch(t,s){const i=this.state.batch;if(!i||i.pending||this.state.busy)return;const r={...i,rows:t,project:s};this.set({batch:r}),this.persist("work:reclassify:"+i.id,r).catch(n=>this.set({error:H(n)}))}async refreshBatch(){const t=this.state.batch;if(!(!this.writable||!t||t.undo||t.pending||this.state.busy))try{const s=await Promise.all(t.rows.map(async r=>(await this.client.request(ne+"/"+r.id)).fact)),i={...t,rows:s};await this.persist("work:reclassify:"+t.id,i),this.set({batch:i,error:"已读取所选事实的最新版本,请核对后再确认归类。"})}catch(s){this.set({error:H(s)})}}async cancelBatch(){const t=this.state.batch;if(!(!t||t.pending||this.state.busy))try{await this.writes,await this.store.remove("work:reclassify:"+t.id),await this.store.remove("work:reclassify:active"),this.set({batch:void 0})}catch(s){this.set({error:H(s)})}}async undo(){this.state.undo&&!this.state.batch&&await this.beginBatch([],!0)}async commitBatch(){let t=this.state.batch;if(!this.writable||!t||this.state.busy)return;this.set({busy:!0,error:""});const s="work:reclassify:"+t.id;try{if(await this.writes,!t.pending){if(!t.undo&&(t.rows.length<1||t.rows.length>100))throw new Error("请选择1–100条已加载记录");const c=t.undo?this.state.undo:{items:t.rows.map(f=>({id:f.id,expectedVersion:f.version})),project:t.project.trim()||null};if(!c)throw new Error("没有可撤销的项目调整");t={...t,pending:{path:ne+(t.undo?"/reclassify/undo":"/reclassify"),method:"POST",data:c,key:crypto.randomUUID()}},await this.persist(s,t),this.set({batch:t})}const i=t.pending,{facts:r}=await this.client.request(i.path,i.method,i.data,i.key),n=i.data;if(!Array.isArray(r)||r.length!==n.items.length||n.items.some(c=>!r.some(f=>f.id===c.id&&f.version===c.expectedVersion+1&&f.project===("project"in c?c.project:n.project))))throw new Error("归类回执不匹配,请手动确认原请求");const d=t.undo?void 0:{items:r.map(c=>({id:c.id,expectedVersion:c.version,project:t.rows.find(f=>f.id===c.id).project}))};d?await this.persist("work:reclassify:undo",d):await this.store.remove("work:reclassify:undo"),await this.store.remove(s),await this.store.remove("work:reclassify:active");const l=r.find(c=>{var f;return c.id===((f=this.state.detail)==null?void 0:f.id)})??this.state.detail;this.set({batch:void 0,undo:d,detail:l}),await this.load()}catch(i){i instanceof ee&&!i.uncertain&&t.pending&&(t={...t,pending:void 0},await this.persist(s,t),this.set({batch:t})),this.set({error:H(i)})}finally{this.set({busy:!1})}}}function gt({model:a,writable:t}){const{draft:s,busy:i,error:r,detail:n}=a.state;if(!s)return null;const d=!t||i||!!s.pending,l=(c,f)=>a.update({[c]:f});return e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col","aria-label":"工作事实编辑",children:[e.jsxs("header",{className:"flex items-center justify-between border-b p-4",children:[e.jsx(u,{variant:"ghost",disabled:i,onClick:()=>a.closeEditor(),children:"返回"}),e.jsx("h2",{children:s.base?"编辑事实":"补记事实"}),e.jsx(u,{disabled:i||!t,onClick:()=>void a.save(),children:i?"保存中…":s.pending?"手动确认原请求":"保存"})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-5 overflow-y-auto p-5",children:[r?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:r}):null,s.pending?e.jsx("p",{role:"status",className:"text-sm",children:"保存结果待确认。原请求已保存在本机,返回或重启不会自动发送。"}):null,e.jsxs("label",{className:"space-y-2 text-sm",children:["工作日期",e.jsx(K,{type:"date","aria-label":"工作日期",disabled:d,value:s.fields.workDate,onChange:c=>l("workDate",c.target.value)})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["标题",e.jsx(K,{"aria-label":"事实标题",disabled:d,value:s.fields.title,onChange:c=>l("title",c.target.value)})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["事实正文",e.jsx("textarea",{"aria-label":"事实正文",disabled:d,className:"min-h-48 w-full rounded-xl border bg-background p-3",value:s.fields.statement,onChange:c=>l("statement",c.target.value)})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["实际状态",e.jsx("select",{"aria-label":"事实状态",disabled:d,className:"w-full rounded-xl border bg-background p-3",value:s.fields.status,onChange:c=>a.update({status:c.target.value}),children:Object.entries(Ne).map(([c,f])=>e.jsx("option",{value:c,children:f},c))})]}),e.jsxs("label",{className:"space-y-2 text-sm",children:["项目(可选)",e.jsx(K,{"aria-label":"事实项目",placeholder:"未归类",disabled:d,value:s.fields.project??"",onChange:c=>a.update({project:c.target.value||null})})]}),s.base&&!s.pending?e.jsxs(e.Fragment,{children:[e.jsx(u,{variant:"outline",disabled:i,onClick:()=>void a.refreshVersion(),children:"读取最新版本并保留草稿"}),(n==null?void 0:n.id)===s.id?e.jsxs("div",{className:"whitespace-pre-wrap rounded-xl bg-secondary p-3 text-sm",children:[e.jsxs("p",{children:["服务当前 v",n.version," · ",n.workDate," ·"," ",n.project??"未归类"]}),e.jsx("strong",{children:n.title}),e.jsx("p",{children:n.statement})]}):null]}):null,e.jsx(u,{variant:"ghost",disabled:d,onClick:()=>void a.discardEditor(),children:"丢弃未保存草稿"})]})]})}function vt({model:a,writable:t}){const{batch:s,items:i,busy:r,error:n,undo:d}=a.state;if(!s)return null;const l=!t||r||!!s.pending,c=new Set(s.rows.map(p=>p.id)),f=[...s.rows,...i.filter(p=>!c.has(p.id))];return e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col","aria-label":"重新归类",children:[e.jsxs("header",{className:"flex items-center justify-between border-b p-4",children:[e.jsx("h2",{children:s.undo?"撤销本次归类":"重新归类"}),e.jsx(u,{variant:"ghost",disabled:l,onClick:()=>void a.cancelBatch(),children:"取消"})]}),e.jsxs("div",{className:"flex flex-1 flex-col gap-4 overflow-y-auto p-5",children:[n?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:n}):null,s.pending?e.jsx("p",{children:"操作结果待确认,原请求已保存在本机;不会自动重发。"}):null,s.undo?e.jsxs("p",{children:["按原成功回执的版本还原 ",(d==null?void 0:d.items.length)??0," ","条记录的项目;任何一条版本变化将整批停止。"]}):e.jsxs(e.Fragment,{children:[e.jsx(u,{variant:"ghost",disabled:l,onClick:()=>void a.refreshBatch(),children:"读取所选事实最新版本"}),e.jsxs("p",{className:"text-sm",children:["已选 ",s.rows.length," 条。仅修改项目,正文、日期和状态保持。"]}),e.jsx(u,{variant:"outline",disabled:l||i.length>100,onClick:()=>a.updateBatch([...new Map([...s.rows,...i].map(p=>[p.id,p])).values()],s.project),children:"全选已加载记录"}),a.state.cursor?e.jsx("p",{className:"text-sm text-muted-foreground",children:"还有未加载记录;返回列表加载后再选择。"}):null,e.jsxs("label",{className:"text-sm",children:["目标项目(留空为未归类)",e.jsx(K,{"aria-label":"目标项目",list:"work-projects",disabled:l,value:s.project,onChange:p=>a.updateBatch(s.rows,p.target.value)})]}),e.jsx("datalist",{id:"work-projects",children:[...new Set(i.map(p=>p.project).filter(p=>!!p))].map(p=>e.jsx("option",{value:p},p))}),e.jsx("div",{className:"flex flex-col gap-3",children:f.map(p=>e.jsxs("label",{className:"flex items-start gap-3 rounded-xl border p-3 text-sm",children:[e.jsx("input",{type:"checkbox","aria-label":`选择 ${p.title}`,disabled:l||!c.has(p.id)&&s.rows.length>=100,checked:c.has(p.id),onChange:m=>a.updateBatch(m.target.checked?[...s.rows,p]:s.rows.filter(o=>o.id!==p.id),s.project)}),e.jsxs("span",{children:[e.jsx("strong",{children:p.title}),e.jsx("br",{}),p.workDate," · ",p.project??"未归类",e.jsx("br",{}),e.jsx("small",{children:p.id})]})]},p.id))})]})]}),e.jsx("div",{className:"shrink-0 border-t bg-background p-4",children:e.jsx(u,{className:"h-auto min-h-10 w-full whitespace-normal break-words",disabled:!t||r||!s.undo&&!s.rows.length,onClick:()=>void a.commitBatch(),children:r?"保存中…":s.pending?"手动确认原请求":s.undo?"确认撤销项目调整":`确认 ${s.rows.length} 条 → ${s.project.trim()||"未归类"}`})})]})}function bt({model:a,active:t,writable:s,onReview:i}){const r=x.useSyncExternalStore(a.subscribe,a.snapshot),[n,d]=x.useState(!1),[l,c]=x.useState(""),[f,p]=x.useState(""),[m,o]=x.useState(!1);x.useEffect(()=>{a.writable=s},[a,s]),x.useEffect(()=>{t&&a.load()},[t,a]);const{detail:v,draft:k,batch:E}=r,[g,b]=x.useState();if(g)return e.jsx(xt,{original:g,model:a,writable:s,onClose:()=>b(void 0),onLogs:()=>{b(void 0),a.show("logs",g.from,g.to)}});const S=w=>{const C=Math.round((Date.parse(Ue()+"T00:00:00Z")-Date.parse(w+"T00:00:00Z"))/864e5);return`${C===0?"今天 · ":C===1?"昨天 · ":C===2?"前天 · ":""}${w}`},j=()=>{if(r.view==="reports")return"这个日期范围尚无周报";const w=r.from&&r.to?Math.floor((Date.parse(r.to)-Date.parse(r.from))/864e5)+1:0;return w>0&&r.days.length===w&&r.days.every(C=>C.coverage==="complete"&&C.count===0)?"已导入范围内没有记录":r.days.some(C=>C.coverage==="partial")?"记录尚未完整导入":"这个日期范围尚未导入工作记录"};return e.jsxs("div",{className:"relative flex min-h-0 flex-1 flex-col",children:[e.jsxs("div",{className:k||E||v?"hidden":"flex min-h-0 flex-1 flex-col",children:[e.jsxs("header",{className:"flex shrink-0 items-center justify-between px-5 py-3",children:[e.jsx("h1",{className:"text-lg font-semibold",children:"工作"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(u,{variant:"ghost",size:"sm",onClick:()=>{c(r.from),p(r.to),d(w=>!w)},children:"日期"}),e.jsx(u,{variant:"ghost",size:"sm","aria-label":"工作更多",onClick:()=>o(w=>!w),children:"更多"})]})]}),a.reportsSupported&&e.jsx("div",{className:"flex gap-2 px-5 pb-3","aria-label":"工作类型",children:[["all","全部"],["logs","日志"],["reports","总结"]].map(([w,C])=>e.jsx(u,{size:"sm",variant:r.view===w?"secondary":"ghost",onClick:()=>void a.show(w),children:C},w))}),m?e.jsxs("div",{className:"flex flex-wrap gap-2 border-y px-5 py-2",children:[e.jsx(u,{variant:"ghost",size:"sm",disabled:r.loading,onClick:()=>{o(!1),a.load()},children:"刷新工作"}),e.jsx(u,{variant:"ghost",size:"sm",onClick:()=>{o(!1),i()},children:"AI 回顾"}),e.jsx(u,{variant:"ghost",size:"sm",disabled:!s,onClick:()=>{o(!1),a.beginBatch([])},children:"重新归类"}),r.undo?e.jsx(u,{variant:"ghost",size:"sm",disabled:!s,onClick:()=>{o(!1),a.undo()},children:"撤销上次归类"}):null]}):null,n?e.jsxs("form",{className:"flex flex-col gap-3 border-y p-5",onSubmit:w=>{w.preventDefault(),(!l||!f||l<=f)&&(d(!1),a.dates(l,f))},children:[e.jsxs("label",{className:"text-sm",children:["开始日期",e.jsx(K,{type:"date","aria-label":"开始日期",value:l,onChange:w=>c(w.target.value)})]}),e.jsxs("label",{className:"text-sm",children:["结束日期",e.jsx(K,{type:"date","aria-label":"结束日期",value:f,onChange:w=>p(w.target.value)})]}),l&&f&&l>f?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:"开始日期不能晚于结束日期"}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{type:"submit",disabled:!!(l&&f&&l>f),children:"应用日期"}),e.jsx(u,{type:"button",variant:"outline",onClick:()=>{d(!1),a.dates("","")},children:"清空日期"}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>d(!1),children:"取消"})]})]}):null,r.from||r.to?e.jsxs("p",{className:"px-5 pb-2 text-sm text-muted-foreground",children:[r.from||"最早"," 至 ",r.to||"最近"]}):null,e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto px-5 pb-24","aria-label":"工作事实列表",children:[r.error?e.jsx("p",{role:"alert",className:"py-3 text-sm text-destructive",children:r.error}):null,[...new Set([...r.items.map(w=>w.workDate),...r.reports.map(w=>w.to)])].sort().reverse().map(w=>{var C;return e.jsxs("section",{className:"pb-5",children:[e.jsxs("h2",{className:"mb-3 text-sm font-medium text-muted-foreground",children:[S(w)," ",e.jsxs("span",{children:["· ",((C=r.days.find(R=>R.date===w))==null?void 0:C.count)??"…"," 条"]})]}),e.jsxs("div",{className:"flex flex-col gap-3",children:[r.reports.filter(R=>R.to===w).map(R=>e.jsx(ft,{report:R,onOpen:()=>b(R)},R.id)),r.items.filter(R=>R.workDate===w).map(R=>e.jsxs("button",{type:"button",onClick:()=>void a.detail(R.id),className:"rounded-2xl border bg-card p-4 text-left",children:[e.jsxs("p",{className:"mb-2 text-xs text-muted-foreground",children:[R.project??"未归类"," · ",Ne[R.status]]}),e.jsx("h3",{className:"mb-2 font-semibold",children:R.title}),e.jsx("p",{className:"whitespace-pre-wrap break-words text-sm leading-7",children:R.statement})]},R.id))]})]},w)}),!r.loading&&!r.items.length&&!r.reports.length?e.jsx("p",{className:"py-16 text-center text-muted-foreground",children:j()}):null,r.loading?e.jsx("p",{role:"status",className:"py-8 text-center",children:"正在读取工作事实…"}):null,r.cursor?e.jsx(u,{variant:"outline",className:"w-full",disabled:r.loading,onClick:()=>void a.load(!0),children:"加载更多工作记录"}):null]}),e.jsx(u,{"aria-label":"补记工作事实",className:"absolute bottom-5 right-5 size-12 rounded-full text-2xl shadow-lg",disabled:!s,onClick:()=>void a.edit(),children:"+"})]}),v&&!k&&!E?e.jsxs("section",{className:"flex min-h-0 flex-1 flex-col","aria-label":"工作事实详情",children:[e.jsxs("header",{className:"flex items-center justify-between border-b p-4",children:[e.jsx(u,{variant:"ghost",onClick:()=>a.closeDetail(),children:"返回工作"}),e.jsx(u,{variant:"ghost",disabled:!s,onClick:()=>void a.edit(v),children:"编辑事实"})]}),e.jsxs("div",{className:"flex-1 overflow-y-auto p-5",children:[e.jsxs("p",{className:"mb-3 text-sm text-muted-foreground",children:[v.workDate," · ",v.project??"未归类"," ·"," ",Ne[v.status]]}),e.jsx("h2",{className:"mb-4 text-xl font-semibold",children:v.title}),e.jsx("p",{className:"mb-6 whitespace-pre-wrap break-words leading-8",children:v.statement}),e.jsx(u,{variant:"outline",disabled:!s,onClick:()=>void a.beginBatch([v]),children:"重新归类这条"})]})]}):null,k?e.jsx(gt,{model:a,writable:s}):E?e.jsx(vt,{model:a,writable:s}):null]})}const ue={bodyScalars:2e4,attachmentBytes:5*1024*1024,imagesPerRecord:1,markdownPerRecord:1,defaultPageSize:20,maxPageSize:100,tagsPerRecord:2,tagScalars:20};function Le(a){if(a.length>ue.tagsPerRecord)throw new Error("最多 2 个标签");const t=a.map(s=>s.trim());if(t.some(s=>!s||[...s].length>ue.tagScalars||/[\u0000-\u001f\u007f\uD800-\uDFFF]/u.test(s)))throw new Error("标签须为 1–20 个字符,不能包含控制字符或无效 Unicode");if(new Set(t).size!==t.length)throw new Error("标签不能重复");return t}function jt(a,t){var s,i;return(((s=a==null?void 0:a.latest)==null?void 0:s.sequence)??0)>(((i=t==null?void 0:t.latest)==null?void 0:i.sequence)??0)?a:t??a}function wt(a){return`使用随记 Skill 处理这条记录。先读取最新原文、全部跟进和相关附件,按我本次要求执行。完整结果、图片和文档在当前终端交付;随记只追加简短最终摘要,默认不上传图片、文档或附件,不记录过程或失败。后续问答、补图不自动回写。未经我确认,不标记完成。
12
- `+JSON.stringify({format:"suiji-handoff-v1",...a},null,2)}class $e{constructor(t,s,i,r,n=!1){B(this,"listeners",new Set);B(this,"queue",Promise.resolve());B(this,"writes",0);B(this,"active",!0);B(this,"state");B(this,"correctionAbort");B(this,"correctionKey");B(this,"subscribe",t=>(this.listeners.add(t),()=>{this.listeners.delete(t)}));B(this,"snapshot",()=>this.state);this.client=s,this.store=i,this.followupRecordId=r,this.historySupported=n,this.state={draft:t,busy:!1,localSaving:!1,message:t.frozen?"保存结果待确认,请手动重试;输入暂时锁定":"",localError:!1,conflict:!1}}get storeKey(){return this.followupRecordId?"followup:"+this.followupRecordId:"draft:"+this.state.draft.id}dispose(){var t;this.active=!1,(t=this.correctionAbort)==null||t.abort(),this.listeners.clear()}settled(){return this.queue}initialize(){return this.loadFeedbackState(),this.persist()}async discard(){if(!(this.state.busy||this.state.draft.frozen)){this.patch({busy:!0});try{await this.queue,this.check(),await this.store.remove(this.storeKey),this.patch({discarded:!0})}catch(t){this.patch({message:t instanceof Error?t.message:"放弃草稿失败"})}finally{this.patch({busy:!1})}}}check(){if(!this.active||!this.client.active)throw new DOMException("编辑会话已结束","AbortError")}patch(t){this.state={...this.state,...t},this.listeners.forEach(s=>s())}persist(t=this.state.draft){const s=structuredClone(t);++this.writes,this.patch({localSaving:!0});const i=this.queue.then(()=>this.store.set(this.storeKey,s));return this.queue=i.catch(()=>{}),i.then(()=>this.patch({localError:!1})).catch(r=>{throw this.patch({message:r instanceof Error?r.message:"本机草稿未保存",localError:!0}),r}).finally(()=>{--this.writes,this.patch({localSaving:this.writes>0})})}edit(t){if(this.state.busy||this.state.draft.frozen)return;const s={...this.state.draft,...t};this.patch({draft:s,...t.body!==void 0&&t.body!==this.state.draft.body?{correction:void 0,correctionSource:void 0}:{}}),this.persist(s).catch(()=>{})}async loadLexicon(){try{const t=await this.store.get("lexicon-intent");this.check(),this.patch({lexiconPending:!!t});const s=await this.client.request("/api/suiji/v1/correction-lexicon");this.check(),this.patch({lexicon:s})}catch(t){this.active&&this.patch({correctionMessage:t instanceof Error?t.message:"词库读取失败"})}}async correct(){const t=this.state.draft.body;if(this.state.busy||this.state.draft.frozen||!t.trim()||this.state.correctionBusy)return;if(this.correctionKey&&this.state.correctionSource!==t){this.patch({correctionMessage:"原请求结果待确认;请先取消,再对新正文发起纠错"});return}const s=new AbortController;this.correctionAbort=s;const i=this.correctionKey??crypto.randomUUID();this.correctionKey=i,this.patch({correctionBusy:!0,correction:void 0,correctionSource:t,correctionMessage:"正在纠正文字…"});try{let r=await this.client.request("/api/suiji/v1/corrections","POST",{text:t,...this.historySupported&&!this.followupRecordId?{feedbackCapable:!0,...this.state.draft.id!=="new"?{recordId:this.state.draft.id}:{}}:{}},i,s.signal);for(this.check(),this.patch({correction:r});r.status==="running"&&!s.signal.aborted;)await new Promise(n=>setTimeout(n,1e3)),this.check(),r=await this.client.request("/api/suiji/v1/corrections/"+r.id,"GET",void 0,void 0,s.signal),this.patch({correction:r});if(this.check(),s.signal.aborted)return;this.correctionKey=void 0,this.patch({correction:r,correctionMessage:r.status==="completed"?"":r.error??"纠错未完成"})}catch(r){this.active&&!s.signal.aborted&&this.patch({correctionMessage:"纠错结果待确认;再次点击会沿用同一请求。"+(r instanceof Error?r.message:"")})}finally{this.correctionAbort===s&&(this.correctionAbort=void 0,this.patch({correctionBusy:!1}))}}async cancelCorrection(){var s,i;const t=(s=this.state.correction)==null?void 0:s.id;(i=this.correctionAbort)==null||i.abort(),t&&await this.client.request("/api/suiji/v1/corrections/"+t,"DELETE").catch(()=>{}),this.correctionKey=void 0,this.patch({correction:void 0,correctionSource:void 0,correctionBusy:!1,correctionMessage:""})}applyCorrection(){const{correction:t,correctionSource:s,draft:i}=this.state;if(!t||t.status!=="completed"||!t.correctedText||s!==i.body||i.frozen||this.state.busy||!this.active||!this.client.active){this.patch({correctionMessage:"正文或编辑会话已变化,请重新纠错"});return}const r={...i,body:t.correctedText,correctionTrace:t.historyId&&this.state.correctionSource?{correctionId:t.id,inputText:this.state.correctionSource,correctedText:t.correctedText,applied:!0}:void 0};this.patch({draft:r,correction:void 0,correctionSource:void 0}),this.persist(r).catch(()=>{}),this.patch({correctionMessage:"已应用到本机草稿;点击保存才会更新记录"})}async putLexicon(t){this.check();const s=this.state.lexicon;if(!s)throw new Error("请先读取词库");const r=await this.store.get("lexicon-intent")??{key:crypto.randomUUID(),data:{expectedVersion:s.version,entries:t}};await this.store.set("lexicon-intent",r),this.patch({lexiconPending:!0});try{const n=await this.client.request("/api/suiji/v1/correction-lexicon","PUT",r.data,r.key);this.check(),await this.store.remove("lexicon-intent"),this.patch({lexicon:n,lexiconPending:!1,correctionMessage:"已记住;可在词库中撤销"})}catch(n){throw n instanceof ee&&!n.uncertain&&(await this.store.remove("lexicon-intent"),this.patch({lexiconPending:!1})),this.patch({correctionMessage:n instanceof Error?n.message:"词库结果待确认,请手动重试"}),n}}async addFile(t){try{if(this.check(),t.size>ue.attachmentBytes)throw new Error("每个附件最多 5 MiB");const s=["image/jpeg","image/png"].includes(t.type);if(!s&&!/\.md$/i.test(t.name))throw new Error("仅支持 JPEG、PNG 和 Markdown");s||new TextDecoder("utf-8",{fatal:!0}).decode(await t.arrayBuffer()),this.check();const i=this.state.draft,r=s?"image":"markdown";if(i.existing.some(n=>n.kind===r)||i.files.some(n=>(n.file.type.startsWith("image/")?"image":"markdown")===r))throw new Error("每条最多一张图片和一个 Markdown,请先移除原附件");s||(t=new File([t],t.name,{type:"text/markdown",lastModified:t.lastModified})),this.edit({files:[...i.files,{id:crypto.randomUUID(),file:t,key:crypto.randomUUID()}]})}catch(s){this.patch({message:s instanceof Error?s.message:"附件读取失败"})}}async save(){var t,s;if(!(this.state.busy||this.state.saved||this.state.savedFollowup)){this.patch({busy:!0,message:""});try{this.check();let i=this.state.draft;if(!this.followupRecordId&&!i.pending&&i.tags!==void 0&&(i={...i,tags:Le(i.tags)},this.patch({draft:i})),[...i.body].length>ue.bodyScalars)throw new Error("正文最多 20,000 个字符");if(!i.body.trim()&&!i.existing.length&&!i.files.length)throw new Error("请输入正文或添加附件");if(await this.persist(i),this.check(),!i.pending){i={...i,frozen:!0},this.patch({draft:i}),await this.persist(i);for(const[d,l]of i.files.entries()){if(l.uploaded)continue;this.check();const c=new FormData;c.append("file",l.file,l.file.name);const f=await this.client.request("/api/suiji/v1/uploads","POST",c,l.key);this.check(),i={...i,files:i.files.map((p,m)=>m===d?{...p,uploaded:f.attachment}:p)},this.patch({draft:i}),await this.persist(i)}i={...i,pending:{path:this.followupRecordId?`/api/suiji/v1/records/${this.followupRecordId}/followups`:"/api/suiji/v1/records"+(i.id==="new"?"":"/"+i.id),method:this.followupRecordId||i.id==="new"?"POST":"PATCH",key:crypto.randomUUID(),data:{...this.followupRecordId?{}:{kind:i.kind,...i.id==="new"?{}:{expectedVersion:i.version}},body:i.body,...this.followupRecordId||i.tags===void 0?{}:{tags:i.tags},attachmentIds:[...i.existing.map(d=>d.id),...i.files.map(d=>d.uploaded.id)]}}},this.patch({draft:i}),await this.persist(i)}this.check();const r=i.pending,n=await this.client.request(r.path,r.method,r.data,r.key);if(this.check(),this.followupRecordId&&(!("followup"in n)||n.followup.recordId!==this.followupRecordId||n.followup.body!==i.body||JSON.stringify(n.followup.attachments.map(d=>d.id))!==JSON.stringify(i.files.map(d=>d.uploaded.id))||((t=n.followupSummary.latest)==null?void 0:t.sequence)!==n.followup.sequence))throw new Error("跟进响应与保存内容不一致,请手动重试确认");if("record"in n&&(n.record.body!==i.body||i.id!=="new"&&n.record.id!==i.id))throw new Error("记录响应与保存正文不一致,请手动重试确认");"record"in n&&((s=i.correctionTrace)!=null&&s.applied)&&(i.version===void 0||n.record.version>i.version)&&await this.enqueueFeedback({correctionId:i.correctionTrace.correctionId,key:crypto.randomUUID(),recordId:n.record.id,recordVersion:n.record.version,saveKey:r.key}).catch(()=>{}),await this.store.remove(this.storeKey),"record"in n&&this.retryFeedback(),"followup"in n?this.patch({savedFollowup:n}):this.patch({saved:n.record})}catch(i){if(!this.active)return;if(i instanceof ee&&!i.uncertain){const r=i.detail.error.code==="VERSION_CONFLICT",n={...this.state.draft,frozen:!1,pending:void 0};this.patch({draft:n,conflict:r,message:i.message}),await this.persist(n).catch(()=>{})}else this.patch({message:(this.state.draft.frozen?"保存结果待确认,手动重试会沿用同一次请求。":"")+(i instanceof Error?i.message:"保存失败")})}finally{this.patch({busy:!1})}}}async loadPreferences(){if(this.historySupported)try{const t=await this.client.request("/api/suiji/v1/correction-preferences");this.check(),this.patch({preferences:t})}catch(t){this.patch({correctionMessage:t instanceof Error?t.message:"读取历史设置失败"})}}async setHistoryEnabled(t){const s=this.state.preferences;if(s)try{const i=await this.client.request("/api/suiji/v1/correction-preferences","PUT",{expectedVersion:s.version,historyEnabled:t},crypto.randomUUID());this.check(),this.patch({preferences:i})}catch(i){this.patch({correctionMessage:i instanceof Error?i.message:"设置失败"})}}async loadHistory(t){if(this.historySupported)try{const s=await this.client.request("/api/suiji/v1/correction-history"+(t?"?cursor="+encodeURIComponent(t):""));this.check(),this.patch({history:t&&this.state.history?{items:[...this.state.history.items,...s.items],nextCursor:s.nextCursor}:s})}catch(s){this.patch({correctionMessage:s instanceof Error?s.message:"历史读取失败"})}}async deleteHistory(t){try{await this.client.request("/api/suiji/v1/correction-history"+(t?"/"+t:""),"DELETE",void 0,crypto.randomUUID()),this.check(),await this.loadHistory(),await this.loadPreferences()}catch(s){this.patch({correctionMessage:s instanceof Error?s.message:"删除失败"})}}async loadFeedbackState(){const t=await this.store.get("feedback-intents").catch(()=>{});this.active&&this.patch({feedbackPending:!!(t!=null&&t.length)})}async enqueueFeedback(t){const s=await this.store.get("feedback-intents")??[];await this.store.set("feedback-intents",[...s,t]),this.patch({feedbackPending:!0})}async retryFeedback(){const t=await this.store.get("feedback-intents").catch(()=>{});if(!(t!=null&&t.length))return;const s=[];for(const i of t)try{await this.client.request("/api/suiji/v1/corrections/"+i.correctionId+"/feedback","POST",{recordId:i.recordId,recordVersion:i.recordVersion,saveKey:i.saveKey},i.key)}catch(r){(!(r instanceof ee)||r.uncertain)&&s.push(i)}s.length?await this.store.set("feedback-intents",s):await this.store.remove("feedback-intents"),this.patch({feedbackPending:!!s.length})}async loadLatest(){if(!(this.state.busy||this.state.draft.id==="new"))try{const{record:t}=await this.client.request("/api/suiji/v1/records/"+this.state.draft.id);this.check(),this.patch({latest:t})}catch(t){this.patch({message:t instanceof Error?t.message:"读取最新版本失败"})}}acceptLatestVersion(){const t=this.state.latest;if(!t||this.state.busy||this.state.draft.frozen)return;const s={...this.state.draft,version:t.version,existing:t.attachments,files:[]};if(this.state.draft.files.length){this.patch({message:"本机还有新增附件,请先保存其文件并移除,再采用最新附件版本"});return}this.patch({draft:s,latest:void 0,conflict:!1,message:"已采用最新版本号与附件,本机正文、类型和标签选择保留;请比较后手动保存"}),this.persist(s).catch(()=>{})}}function yt({client:a,store:t,writable:s,alive:i,models:r,setEditor:n,setItems:d,setDetail:l,setMessage:c}){const f=A(m=>{if(!i.current||!a.active)return;const o=v=>({...v.version>m.version?v:m,followupSummary:jt(v.followupSummary,m.followupSummary)});d(v=>v.map(k=>k.id===m.id?o(k):k)),l(v=>(v==null?void 0:v.record.id)===m.id?{...v,record:o(v.record)}:v)}),p=A(async m=>{if(!(!s||m.deletedAt))try{const o="followup:"+m.id;let v=r.current.get(o);if(!v){const k=await t.get(o)??{id:m.id,kind:"note",body:"",existing:[],files:[]};if(!i.current)return;v=new $e(k,a,t,m.id),r.current.set(o,v),await v.initialize()}i.current&&n(v)}catch(o){i.current&&c(o instanceof Error?o.message:"跟进草稿读取失败")}});return{acceptRecord:f,editFollowup:p}}function kt({client:a,store:t,writable:s,statusBusy:i,alive:r,setStatusBusy:n,setMessage:d,setPending:l,acceptRecord:c,setDetail:f,load:p}){return A(async(m,o)=>{var v;if(!(!s||i)){n(!0),d("");try{const k=await t.get("status:"+m.id);if(!k&&((v=await t.get("draft:"+m.id))!=null&&v.frozen))throw new Error("正文保存结果待确认,请先在编辑器确认");const E=k??{path:`/api/suiji/v1/records/${m.id}${"tags"in o?"":"trashed"in o?"/trash":"/task-status"}`,method:"tags"in o?"PATCH":"POST",key:crypto.randomUUID(),data:{expectedVersion:m.version,...o}};if(await t.set("status:"+m.id,E),!r.current)return;l(b=>new Set([...b,m.id]));const g=await a.request(E.path,E.method,E.data,E.key);if(!r.current)return;await t.remove("status:"+m.id),l(b=>{const S=new Set(b);return S.delete(m.id),S}),c(g.record),f(b=>(b==null?void 0:b.record.id)!==m.id?b:E.path.endsWith("/trash")||E.path.endsWith("/task-status")&&g.record.taskStatus==="done"?void 0:b),await p()}catch(k){if(!r.current)return;if(k instanceof ee&&!k.uncertain)try{await t.remove("status:"+m.id),l(E=>{const g=new Set(E);return g.delete(m.id),g})}catch{d("本机状态确认写入失败,请手动重试");return}if(k instanceof ee&&k.detail.error.code==="VERSION_CONFLICT"){try{const E=await a.request(`/api/suiji/v1/records/${m.id}`);c(E.record),d("记录已在其他地方更新,已显示最新内容,请重新选择标签或操作")}catch{d("记录已有新版本,读取失败,请返回列表重新打开后再操作")}return}d(k instanceof Error?k.message:"操作结果待确认")}finally{r.current&&n(!1)}}})}const Ae=["bg-emerald-100 text-emerald-900 dark:bg-emerald-950 dark:text-emerald-200","bg-blue-100 text-blue-900 dark:bg-blue-950 dark:text-blue-200","bg-purple-100 text-purple-900 dark:bg-purple-950 dark:text-purple-200","bg-pink-100 text-pink-900 dark:bg-pink-950 dark:text-pink-200","bg-orange-100 text-orange-900 dark:bg-orange-950 dark:text-orange-200","bg-teal-100 text-teal-900 dark:bg-teal-950 dark:text-teal-200"];function Se(a){let t=0;for(const s of a)t=(t*31+s.codePointAt(0))%Ae.length;return Ae[t]}function he({tags:a=[],onSelect:t}){return a.length?e.jsx("div",{className:"relative flex flex-wrap gap-2",children:a.map(s=>t?e.jsx("button",{type:"button",className:`rounded-full px-2.5 py-1 text-xs break-all ${Se(s)}`,"aria-label":`筛选标签:${s}`,onClick:()=>t(s),children:s},s):e.jsx("span",{className:`rounded-full px-2.5 py-1 text-xs break-all ${Se(s)}`,children:s},s))}):null}function Ve({selected:a=[],available:t,onChange:s}){const[i,r]=x.useState(!1),[n,d]=x.useState(""),[l,c]=x.useState(""),f=t.slice(0,6),p=o=>{try{s(Le([...a,o])),d(""),c(""),r(!1)}catch(v){c(v.message)}},m=o=>{s(a.filter(v=>v!==o)),c("")};return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[a.filter(o=>!f.includes(o)).map(o=>e.jsxs("button",{type:"button","aria-label":`移除标签:${o}`,className:`rounded-full px-2.5 py-1 text-sm break-all ${Se(o)}`,onClick:()=>m(o),children:[o," ×"]},o)),e.jsx(u,{type:"button",variant:"ghost",size:"sm",disabled:a.length>=2,"aria-expanded":i,onClick:()=>r(!i),children:"+标签"}),a.length>=2?e.jsx("span",{className:"text-xs text-muted-foreground",children:"最多 2 个标签"}):null]}),f.length?e.jsxs("div",{role:"group","aria-label":"最近使用的标签",className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"text-xs text-muted-foreground",children:"最近使用"}),f.map(o=>{const v=a.includes(o);return e.jsxs(u,{type:"button",variant:v?"default":"outline",size:"sm","aria-pressed":v,disabled:!v&&a.length>=2,onClick:()=>v?m(o):p(o),children:[o,v?" ✓":""]},o)})]}):null,i&&a.length<2?e.jsxs("div",{className:"flex flex-col gap-2 rounded-xl border p-3",children:[e.jsx(K,{"aria-label":"标签名称",placeholder:"搜索或创建标签",value:n,onChange:o=>d(o.target.value),onKeyDown:o=>{o.key==="Enter"&&!o.nativeEvent.isComposing&&(o.preventDefault(),p(n))}}),e.jsx("div",{className:"flex max-h-40 flex-wrap gap-2 overflow-y-auto",children:t.filter(o=>!a.includes(o)&&o.includes(n.trim())).map(o=>e.jsx(u,{type:"button",variant:"outline",size:"sm",onClick:()=>p(o),children:o},o))}),n.trim()&&!t.includes(n.trim())?e.jsxs(u,{type:"button",variant:"outline",size:"sm",onClick:()=>p(n),children:["创建「",n.trim(),"」"]}):null]}):null,l?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:l}):null]})}function Nt({available:a,selected:t,onSelect:s}){const[i,r]=x.useState(!1),[n,d]=x.useState(""),l=a.slice(0,5);if(t&&!l.includes(t)&&l.push(t),!l.length)return null;const c=f=>{s(f===t?"":f),r(!1),d("")};return e.jsxs("div",{className:"mb-4 flex flex-col gap-2","aria-label":"标签筛选",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[l.map(f=>e.jsxs(u,{type:"button",size:"sm",variant:t===f?"default":"outline","aria-pressed":t===f,onClick:()=>c(f),children:[f,t===f?" ×":""]},f)),e.jsx(u,{type:"button",variant:"ghost",size:"sm","aria-expanded":i,onClick:()=>r(!i),children:"更多标签"})]}),i?e.jsxs("div",{className:"flex flex-col gap-2 rounded-xl border p-3",children:[e.jsx(K,{"aria-label":"搜索标签",placeholder:"搜索已有标签",value:n,onChange:f=>d(f.target.value)}),e.jsx("div",{className:"flex max-h-48 flex-wrap gap-2 overflow-y-auto",children:a.filter(f=>f.includes(n.trim())).map(f=>e.jsx(u,{type:"button",size:"sm",variant:t===f?"default":"outline",onClick:()=>c(f),children:f},f))})]}):null]})}function St(a,t){const s=[...new Set(t.map(r=>r.canonical))].filter(Boolean).sort((r,n)=>n.length-r.length),i=[];for(let r=0;r<a.length;){const n=s.find(d=>a.startsWith(d,r));if(n)i.push({text:n,term:t.find(d=>d.canonical===n)}),r+=n.length;else{const d=i.at(-1);d&&!d.term?d.text+=a.charAt(r):i.push({text:a.charAt(r)}),r++}}return i}function Ct({model:a,selectedText:t,available:s}){var C,R,L,F,W,N;const i=x.useSyncExternalStore(a.subscribe,a.snapshot),[r,n]=x.useState(!1),[d,l]=x.useState(!1),[c,f]=x.useState(!1),[p,m]=x.useState(),[o,v]=x.useState(),[k,E]=x.useState("");x.useEffect(()=>{a.loadLexicon(),a.loadPreferences()},[a]);const g=((C=i.lexicon)==null?void 0:C.entries)??[],b=async()=>{if(!p||!i.lexicon)return;const y=p.canonical.trim(),q=p.variant.trim();if(!y)return;const M=structuredClone(g),U=structuredClone(g),$=U.find(I=>I.canonical===y);if($?q&&!$.variants.includes(q)&&$.variants.push(q):U.push({canonical:y,variants:q?[q]:[]}),JSON.stringify(U)===JSON.stringify(g)){E("这个写法已在词库中"),m(void 0);return}try{await a.putLexicon(U),v(M),m(void 0)}catch{}},S=async y=>{try{await a.putLexicon(g.filter(q=>q.canonical!==y))}catch{}},j=i.correction,w=(j==null?void 0:j.status)==="completed"&&j.correctedText;return e.jsxs("section",{className:"space-y-3 rounded-xl border p-4 text-sm","aria-label":"文字纠错",children:[e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(u,{type:"button",variant:"outline",disabled:!s||!i.draft.body.trim()||i.correctionBusy||i.draft.frozen,onClick:()=>void a.correct(),children:i.correctionBusy?"正在纠正…":"纠正文字"}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>l(!d),children:"纠错词库"}),a.historySupported?e.jsx(u,{type:"button",variant:"ghost",onClick:()=>{f(!c),c||a.loadHistory()},children:"历史辅助"}):null,t?e.jsx(u,{type:"button",variant:"ghost",onClick:()=>m({canonical:t,variant:""}),children:"记住选词"}):null]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"点击后,本次文字和专有词库会经 Codex CLI 发送给模型提供方。"}),s?null:e.jsx("p",{className:"text-xs text-muted-foreground",children:"此服务尚未启用文字纠错;词库仍可管理。"}),i.correctionMessage||k?e.jsx("p",{role:"status",children:k||i.correctionMessage}):null,i.feedbackPending?e.jsx(u,{type:"button",variant:"outline",onClick:()=>void a.retryFeedback(),children:"手动重试历史反馈"}):null,c&&a.historySupported?e.jsxs("div",{className:"space-y-2 rounded-lg border p-3",children:[e.jsx("strong",{children:"历史辅助"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"开启后,随记服务端会保存纠错前文本、候选和应用后实际保存的正文; 下次纠错会将少量相关修改示例连同本次文字发送给模型提供方。不会自动修改正式词库。"}),e.jsxs("label",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"checkbox",checked:((R=i.preferences)==null?void 0:R.historyEnabled)??!1,disabled:!i.preferences,onChange:y=>void a.setHistoryEnabled(y.target.checked)}),"启用历史辅助"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"关闭后不再新增或使用历史。清空只删除纠错派生记录,不删除随记正文或词库。"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{type:"button",variant:"outline",onClick:()=>void a.loadHistory(),children:"刷新历史"}),e.jsx(u,{type:"button",variant:"outline",disabled:!((L=i.history)!=null&&L.items.length),onClick:()=>void a.deleteHistory(),children:"清空纠错历史"})]}),(F=i.history)==null?void 0:F.items.map(y=>e.jsxs("div",{className:"space-y-1 rounded border p-2",children:[e.jsxs("p",{className:"whitespace-pre-wrap break-words",children:["候选:",y.correctedText]}),e.jsxs("p",{className:"whitespace-pre-wrap break-words",children:["保存:",y.finalText]}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>void a.deleteHistory(y.id),children:"删除"})]},y.id)),(W=i.history)!=null&&W.nextCursor?e.jsx(u,{type:"button",variant:"outline",onClick:()=>{var y;return void a.loadHistory((y=i.history)==null?void 0:y.nextCursor)},children:"加载更多"}):null]}):null,i.lexiconPending?e.jsx(u,{type:"button",variant:"outline",onClick:()=>void a.putLexicon(g).then(()=>{v(g),m(void 0),E("")}).catch(()=>{}),children:"手动重试确认词库写入"}):null,w?e.jsxs("div",{className:"space-y-3 rounded-lg border p-3",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("strong",{children:"纠错预览"}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>n(!r),children:r?"收起原文":"查看原文"})]}),r?e.jsx("p",{className:"whitespace-pre-wrap break-words",children:i.correctionSource}):null,e.jsx("p",{className:"whitespace-pre-wrap break-words",children:St(j.correctedText,j.suggestedTerms??[]).map((y,q)=>y.term?e.jsx("button",{type:"button",className:"decoration-dotted underline underline-offset-4",onClick:()=>m(y.term),children:y.text},q):e.jsx("span",{children:y.text},q))}),(N=j.uncertainTerms)!=null&&N.length?e.jsxs("p",{children:["仍不确定:",j.uncertainTerms.join("、"),"。请核对原文。"]}):null,e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{type:"button",onClick:()=>a.applyCorrection(),disabled:i.draft.body!==i.correctionSource||i.draft.frozen,children:"应用到草稿"}),e.jsx(u,{type:"button",variant:"outline",onClick:()=>void a.cancelCorrection(),children:"取消"})]})]}):null,p?e.jsxs("div",{className:"space-y-2 rounded-lg border p-3",children:[e.jsx("strong",{children:"记住这个写法"}),e.jsxs("label",{className:"block",children:["正确写法",e.jsx("input",{className:"w-full rounded border bg-background p-2",value:p.canonical,onChange:y=>m({...p,canonical:y.target.value})})]}),e.jsxs("label",{className:"block",children:["误识别写法(可留空)",e.jsx("input",{className:"w-full rounded border bg-background p-2",value:p.variant,onChange:y=>m({...p,variant:y.target.value})})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(u,{type:"button",disabled:i.lexiconPending||!i.lexicon,onClick:()=>void b(),children:"加入词库"}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>m(void 0),children:"取消"})]})]}):null,o?e.jsx(u,{type:"button",variant:"ghost",onClick:()=>{a.putLexicon(o).then(()=>v(void 0)).catch(()=>{})},children:"撤销本次添加"}):null,d?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("strong",{children:"纠错词库"}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>void a.loadLexicon(),children:"刷新"})]}),g.map(y=>e.jsxs("div",{className:"flex items-center justify-between gap-2 rounded border p-2",children:[e.jsxs("span",{children:[y.canonical,y.variants.length?` ← ${y.variants.join("、")}`:""]}),e.jsx(u,{type:"button",variant:"ghost",onClick:()=>void S(y.canonical),children:"移除"})]},y.canonical)),e.jsx(u,{type:"button",variant:"outline",onClick:()=>m({canonical:"",variant:""}),children:"新增词条"})]}):null]})}function Et({model:a,onClose:t,onSaved:s,onFollowupSaved:i,onDiscard:r,availableTags:n,correctionAvailable:d}){const l=x.useSyncExternalStore(a.subscribe,a.snapshot),{draft:c,busy:f}=l,p=A(s),[m,o]=x.useState(""),v=A(g=>{const b=Array.from(g.clipboardData.files).find(S=>S.type.startsWith("image/"));b&&(g.preventDefault(),g.stopPropagation(),!f&&!c.frozen&&a.addFile(b))}),k=A(g=>i==null?void 0:i(g));x.useEffect(()=>{l.savedFollowup&&k(l.savedFollowup)},[l.savedFollowup,k]);const E=A(r);return x.useEffect(()=>{l.saved&&p(l.saved)},[l.saved,p]),x.useEffect(()=>{l.discarded&&E()},[l.discarded,E]),e.jsxs(Fe,{title:a.followupRecordId?"追加跟进":c.id==="new"?"记下一点什么":"编辑记录",onBack:t,busy:f,onPaste:v,description:c.frozen?"保存结果待确认,请手动重试":"草稿自动保留,点保存后上传。",children:[e.jsxs("fieldset",{disabled:f||c.frozen,className:"flex flex-col gap-4",children:[a.followupRecordId?null:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{children:"类型"}),e.jsx("div",{role:"group","aria-label":"记录类型",className:"inline-flex gap-1 rounded-xl bg-secondary p-1",children:[["note","想法"],["task","待办"]].map(([g,b])=>e.jsx(u,{type:"button",size:"sm",variant:c.kind===g?"default":"ghost","aria-pressed":c.kind===g,disabled:!!c.material&&g==="task",onClick:()=>a.edit({kind:g}),children:b},g))})]}),!a.followupRecordId&&c.id!=="new"?e.jsx("p",{className:"text-sm text-muted-foreground",children:c.material?`旧素材归属日期:${c.material.materialDate}。服务切换后保存到浏览;原冻结请求保持不变,请在新版随记中查看。`:"切换为待办时设为未完成;切换为想法时清除待办状态。"}):null,e.jsxs("label",{className:"flex flex-col gap-2",children:[a.followupRecordId?"跟进内容":"原文",e.jsx("textarea",{"aria-label":a.followupRecordId?"跟进内容":"原文",value:c.body,onChange:g=>a.edit({body:g.target.value}),onSelect:g=>{const b=g.currentTarget;o(b.value.slice(b.selectionStart,b.selectionEnd).trim().slice(0,80))},placeholder:"此刻的想法、一个链接,或者以后想做的事……",className:"min-h-56 resize-y rounded-xl border bg-background p-4 leading-relaxed outline-none focus:ring-2 focus:ring-ring"})]}),d!==void 0?e.jsx(Ct,{model:a,selectedText:m,available:d}):null,a.followupRecordId?null:e.jsx(Ve,{selected:c.tags,available:n,onChange:g=>a.edit({tags:g})}),e.jsxs("span",{className:"text-right text-xs text-muted-foreground",children:[[...c.body].length.toLocaleString()," / 20,000"]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["添加图片或 Markdown",e.jsx("span",{className:"text-xs text-muted-foreground",children:"可在编辑区按 ⌘V / Ctrl+V 粘贴图片。"}),e.jsx("input",{"aria-label":"添加附件",type:"file",accept:"image/jpeg,image/png,.md",onChange:g=>{var S;const b=(S=g.target.files)==null?void 0:S[0];g.target.value="",b&&a.addFile(b)}})]}),[...c.existing.map(g=>({id:g.id,name:g.fileName,existing:!0})),...c.files.map(g=>({id:g.id,name:g.file.name,existing:!1}))].map(g=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border p-3",children:[e.jsx("span",{className:"truncate",children:g.name}),e.jsx(u,{type:"button",size:"sm",variant:"ghost",onClick:()=>a.edit(g.existing?{existing:c.existing.filter(b=>b.id!==g.id)}:{files:c.files.filter(b=>b.id!==g.id)}),children:"移除"})]},g.id))]}),l.message?e.jsx("p",{role:"alert",className:"whitespace-pre-wrap text-sm text-destructive",children:l.message}):null,l.conflict?e.jsx(u,{variant:"outline",onClick:()=>void a.loadLatest(),children:"查看最新原文"}):null,l.latest?e.jsxs("section",{className:"flex flex-col gap-3 rounded-xl border p-4",children:[e.jsx("p",{children:"云端标签"}),e.jsx(he,{tags:l.latest.tags}),e.jsxs("p",{children:["本机标签",c.tags===void 0?":未修改,保存时保留云端标签":""]}),e.jsx(he,{tags:c.tags}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:["服务端版本 ",l.latest.version,",类型:",l.latest.kind==="note"?"想法":"待办","。请与上方本机草稿比较"]}),e.jsx("p",{className:"whitespace-pre-wrap break-words",children:l.latest.body}),e.jsx(u,{variant:"outline",onClick:()=>a.acceptLatestVersion(),children:"保留本机正文、类型和标签选择,采用最新版本继续编辑"})]}):null,e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("span",{role:"status",className:"text-xs text-muted-foreground",children:l.localError?"本机草稿未保存":l.localSaving?"正在保存本机草稿…":"本机草稿已保存"}),e.jsx(u,{disabled:f,onClick:()=>void a.save(),children:f?"正在保存…":c.frozen?"手动重试确认":"保存"})]}),e.jsx(u,{variant:"ghost",disabled:f||c.frozen,onClick:()=>{window.confirm("放弃这份本机草稿?已保存的记录不会改变。")&&a.discard()},children:"放弃本机草稿"})]})}function Rt({record:a,client:t,writable:s,onAdd:i,onRecord:r,onOpenLink:n}){var g;const[d,l]=x.useState([]),[c,f]=x.useState(null),[p,m]=x.useState(!1),[o,v]=x.useState(""),k=x.useRef(0),E=A(async(b=!1)=>{const S=++k.current;m(!0),v("");try{const j=`/api/suiji/v1/records/${a.id}`,[w,C]=await Promise.all([t.request(j+"/followups"+(b&&c?"?cursor="+encodeURIComponent(c):"")),b?void 0:t.request(j)]);if(!t.active||S!==k.current)return;l(R=>b?[...R,...w.items.filter(L=>!R.some(F=>F.id===L.id))]:w.items),f(w.nextCursor),C&&r(C.record)}catch(j){S===k.current&&v(j instanceof Error?j.message:"跟进读取失败")}finally{S===k.current&&m(!1)}});return x.useEffect(()=>{const b=k;return E(),()=>{++b.current}},[E,a.id,t]),e.jsxs("section",{className:"flex flex-col gap-4 border-t pt-4","aria-label":"跟进",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("h3",{children:["跟进 ",((g=a.followupSummary)==null?void 0:g.count)??d.length," 条"]}),e.jsx(u,{variant:"ghost",disabled:p,onClick:()=>void E(),children:"刷新跟进"}),a.deletedAt?null:e.jsx(u,{disabled:!s,onClick:i,children:"追加跟进"})]}),o?e.jsx("p",{role:"alert",className:"text-destructive",children:o}):null,d.map(b=>e.jsxs("article",{className:"flex flex-col gap-2 rounded-xl border p-4",children:[e.jsxs("p",{className:"text-xs text-muted-foreground",children:[b.source.actor==="app"?"你":`Agent${b.source.agentName?" · "+b.source.agentName:""}`," ","· ",pe(b.createdAt)]}),b.source.sessionId?e.jsxs("p",{className:"break-all text-xs text-muted-foreground",children:["会话:",b.source.sessionId]}):null,e.jsx(Ce,{body:b.body,onOpenLink:n}),b.attachments.map(S=>e.jsx(Me,{attachment:S,client:t},S.id))]},b.id)),p?e.jsx("p",{role:"status",children:"正在读取跟进…"}):null,c?e.jsx(u,{variant:"outline",disabled:p,onClick:()=>void E(!0),children:"加载更早跟进"}):null]})}const Ee=a=>a.kind==="note"?"想法":{open:"未完成",done:"已完成",archived:"不再做"}[a.taskStatus??"open"];function It({record:a,onOpenLink:t,client:s,onTag:i,availableTags:r,onTagsChange:n,message:d,onClose:l,onEdit:c,onStatus:f,onTrash:p,onReview:m,onRecreate:o,info:v,onFollowup:k,onRecord:E,writable:g,pending:b,busy:S,citedVersion:j}){var M,U;const[w,C]=x.useState(!1),[R,L]=x.useState(!1),[F,W]=x.useState(!1),[N,y]=x.useState("");x.useEffect(()=>{y("")},[a.id,a.body]),x.useEffect(()=>{if(!N)return;const $=window.setTimeout(()=>y(""),2500);return()=>window.clearTimeout($)},[N]);const q=A(async()=>{W(!0),y("");try{await navigator.clipboard.writeText(a.body),y(a.attachments.length?"正文已复制,附件未包含":"正文已复制")}catch{y("复制失败,请重试或选择正文手动复制")}finally{W(!1)}});return e.jsxs(Fe,{title:Ee(a),description:pe(a.createdAt),onBack:l,actions:e.jsxs(e.Fragment,{children:[e.jsx(u,{variant:"ghost",size:"icon","aria-label":"复制",title:a.body?"复制":"暂无正文可复制",disabled:!a.body||F,onClick:()=>void q(),children:e.jsx(Qe,{className:"size-4"})}),e.jsx(u,{variant:"ghost",disabled:!g||b||S||!!a.deletedAt,onClick:c,children:"编辑"})]}),feedback:N?e.jsx("div",{className:"pointer-events-none absolute inset-x-4 bottom-5 z-10 flex justify-center",children:e.jsx("p",{role:"status",className:"rounded-full border bg-popover px-4 py-2.5 text-center text-sm text-popover-foreground shadow-lg",children:N})}):null,children:[j!==void 0&&j!==a.version?e.jsxs("p",{role:"status",className:"text-sm text-muted-foreground",children:["此记录已更新;回答引用的是版本 ",j,",下方是当前原文。"]}):null,e.jsx(Ce,{body:a.body,onOpenLink:t}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(he,{tags:a.tags,onSelect:i}),a.deletedAt?null:e.jsx(u,{variant:"ghost",size:"sm",disabled:!g||b||S,"aria-expanded":R,onClick:()=>L(!R),children:R?"收起标签":(((M=a.tags)==null?void 0:M.length)??0)>=2?"管理标签":"添加标签"})]}),R&&!a.deletedAt?e.jsxs("fieldset",{disabled:!g||b||S,"aria-label":"快速编辑标签",className:"min-w-0 space-y-2 rounded-xl border p-3 disabled:opacity-60",children:[e.jsx(Ve,{selected:a.tags,available:r,onChange:n}),e.jsx("p",{role:"status",className:"text-xs text-muted-foreground",children:S?"正在保存标签…":b?"保存结果待确认,请手动确认":"选择或移除后自动保存,最多 2 个标签"})]}):null,d?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:d}):null,e.jsx("div",{className:"flex flex-wrap gap-2",children:a.attachments.map($=>e.jsx(Me,{attachment:$,client:s},$.id))}),(U=v.features)!=null&&U.followups?e.jsxs(e.Fragment,{children:[a.deletedAt?null:e.jsx(u,{variant:"outline",onClick:()=>{navigator.clipboard.writeText(wt({endpoint:s.endpoint,serverId:v.serverId,ownerId:v.ownerId,recordId:a.id})).then(()=>y("交接指令已复制"),()=>y("复制失败,请重试"))},children:"交给 Agent"}),e.jsx(Rt,{record:a,client:s,writable:g,onAdd:k,onRecord:E,onOpenLink:t})]}):null,a.deletedAt?e.jsx("p",{role:"status",children:"已在回收站,恢复后可继续编辑。"}):null,b?e.jsx(u,{disabled:!g||S,onClick:()=>f("done"),children:"操作结果待确认 · 手动确认"}):null,e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(u,{variant:"outline",disabled:!!a.deletedAt,onClick:m,children:"聊聊这条"}),!a.deletedAt&&a.kind==="task"&&(a.taskStatus==="open"||b)?e.jsxs(e.Fragment,{children:[e.jsx(u,{disabled:!g||S,onClick:()=>f("done"),children:b?"手动确认操作":"标记完成"}),b?null:e.jsx(u,{variant:"outline",disabled:!g||S,onClick:()=>f("archived"),children:"不再做"})]}):!a.deletedAt&&a.taskStatus==="done"?e.jsx(u,{disabled:!g||S||b,onClick:()=>f("open"),children:"撤销完成"}):!a.deletedAt&&a.kind==="task"?e.jsx(u,{disabled:!g,onClick:o,children:"再次想做"}):null,a.deletedAt?e.jsx(u,{disabled:!g||b||S,onClick:()=>p(!1),children:"恢复记录"}):w?e.jsxs("div",{className:"flex flex-wrap items-center gap-2",role:"alert",children:[e.jsx("span",{children:"移入回收站后可恢复,正文和附件会保留。"}),e.jsx(u,{variant:"destructive",disabled:!g||b||S,onClick:()=>{C(!1),p(!0)},children:"确认移入回收站"}),e.jsx(u,{variant:"ghost",onClick:()=>C(!1),children:"取消"})]}):e.jsx(u,{variant:"destructive",disabled:!g||b||S,onClick:()=>C(!0),children:"移入回收站"})]})]})}function Tt({record:a,pending:t,onOpen:s,onOpenLink:i,onTag:r}){var n;return e.jsxs("article",{className:"relative flex flex-col gap-3 rounded-2xl border bg-card p-4 text-left shadow-sm transition-colors hover:bg-accent",children:[e.jsx("button",{type:"button","aria-label":`查看记录:${a.body||"附件记录"}`,onClick:s,className:"absolute inset-0 rounded-2xl focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"}),e.jsxs("span",{className:"pointer-events-none relative flex items-center justify-between gap-3 text-xs text-muted-foreground",children:[e.jsxs("span",{children:[Ee(a),t?" · 状态待确认":""]}),e.jsx("time",{children:pe(a.createdAt)})]}),e.jsx(Ce,{onOpenLink:i,body:a.body||"附件记录",className:"pointer-events-none relative line-clamp-5"}),a.attachments.length?e.jsx("span",{className:"pointer-events-none relative text-xs text-muted-foreground",children:a.attachments.map(d=>d.fileName).join(" · ")}):null,(n=a.followupSummary)!=null&&n.latest?e.jsxs("p",{className:"pointer-events-none relative truncate text-sm text-muted-foreground",children:["跟进 ",a.followupSummary.count," 条 · ",a.followupSummary.latest.excerpt]}):null,e.jsx(he,{tags:a.tags,onSelect:r})]})}function qt({client:a,info:t,scope:s,onScope:i,onOpen:r,onSave:n,writable:d,onLockedChange:l}){var W;const[c,f]=x.useState(""),[p,m]=x.useState([]),[o,v]=x.useState(),[k,E]=x.useState(!1),[g,b]=x.useState(""),S=x.useRef(void 0),j=x.useRef(!0);x.useEffect(()=>{l==null||l(!!(S.current||k||(o==null?void 0:o.status)==="running"))},[k,o,g,l]),x.useEffect(()=>(j.current=!0,()=>{j.current=!1}),[]);const w=A(async()=>{if(!(k||(o==null?void 0:o.status)==="running")){E(!0),b(""),S.current??(S.current={key:crypto.randomUUID(),input:{question:c,scope:s,history:p.flatMap(N=>{var y;return[{role:"user",text:N.question},{role:"assistant",text:((y=N.job.answer)==null?void 0:y.text)??""}]}).slice(-6)}});try{const N=await a.request("/api/suiji/v1/reviews","POST",S.current.input,S.current.key);j.current&&v(N)}catch(N){j.current&&b((N instanceof Error?N.message:"回顾请求失败")+"。问题保留,点击手动确认可重查同一次请求。")}finally{j.current&&E(!1)}}}),C=A(N=>{v(N),N.status!=="running"&&(N.status==="completed"?(m(y=>{var q;return[...y,{question:((q=S.current)==null?void 0:q.input.question)??c,job:N}]}),f(""),b("")):b(N.error??(N.status==="cancelled"?"已取消,原问题保留":"回顾未完成")),S.current=void 0)});x.useEffect(()=>{if(!o)return;if(o.status!=="running"){S.current&&C(o);return}let N=!0,y;const q=async()=>{try{const M=await a.request("/api/suiji/v1/reviews/"+o.id);if(!N)return;M.status!=="running"?C(M):y=setTimeout(()=>void q(),1500)}catch(M){N&&b((M instanceof Error?M.message:"无法读取进度")+"。可手动查询此回顾的进度。")}};return y=setTimeout(()=>void q(),800),()=>{N=!1,clearTimeout(y)}},[a,o,C]);const R=A(async()=>{if(o)try{C(await a.request("/api/suiji/v1/reviews/"+o.id)),b("")}catch(N){b(N instanceof Error?N.message:"查询失败")}}),L=A(async()=>{if(o)try{C(await a.request("/api/suiji/v1/reviews/"+o.id,"DELETE"))}catch(N){b(N instanceof Error?N.message:"取消失败,请手动重试")}}),F=k||(o==null?void 0:o.status)==="running";return(W=t.ai)!=null&&W.enabled?e.jsxs("section",{className:"flex flex-col gap-7",children:[e.jsxs("header",{className:"flex flex-col gap-2",children:[e.jsx("h2",{className:"text-xl font-semibold",children:"从记录里,接着想"}),e.jsx("p",{className:"text-sm leading-6 text-muted-foreground",children:"主动发问后才检索。回答引用实际原文,保存结论由你决定。"})]}),p.map(N=>e.jsxs("article",{className:"flex flex-col gap-4",children:[e.jsx("p",{className:"ml-8 rounded-2xl bg-secondary p-4 whitespace-pre-wrap",children:N.question}),e.jsxs("div",{className:"flex flex-col gap-4 rounded-2xl border bg-card p-5",children:[e.jsx("p",{className:"whitespace-pre-wrap break-words leading-7",children:N.job.answer.text}),N.job.answer.citations.map((y,q)=>e.jsxs("button",{className:"flex flex-col gap-1 rounded-xl border p-3 text-left hover:bg-accent",onClick:()=>r(y.recordId,y.version),children:[e.jsxs("span",{className:"text-xs text-muted-foreground",children:["[",q+1,"] ",pe(y.createdAt)," ·"," ",Ee(y)," · 版本 ",y.version,y.attachment?` · ${y.attachment.fileName}`:""]}),e.jsx("span",{className:"whitespace-pre-wrap break-words text-sm",children:y.quote||"已读取图片附件"})]},q)),e.jsxs("p",{className:"text-xs leading-5 text-muted-foreground",children:["本次查看 ",N.job.answer.coverage.listedRecords," 条摘要、",N.job.answer.coverage.readRecords," 条原文、",N.job.answer.coverage.attachmentReads," ","段附件。关键词检索,未启用向量索引,未读取外链。"]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx(u,{variant:"outline",size:"sm",disabled:!d,onClick:()=>n(N.job.answer.text,"note"),children:"另存笔记"}),e.jsx(u,{variant:"outline",size:"sm",disabled:!d,onClick:()=>n(N.job.answer.text,"task"),children:"新建待办"})]})]})]},N.job.id)),e.jsxs("form",{className:"flex flex-col gap-3 rounded-2xl border bg-card p-5",onSubmit:N=>{N.preventDefault(),w()},children:[e.jsxs("label",{className:"flex items-center gap-3 text-sm",children:["回顾范围",e.jsxs("select",{"aria-label":"回顾范围",disabled:F||!!S.current,value:s.kind,onChange:N=>i({kind:N.target.value}),className:"rounded-lg border bg-background p-2",children:[e.jsx("option",{value:"all",children:"全部历史"}),e.jsx("option",{value:"open",children:"当前待办"}),s.kind==="record"?e.jsx("option",{value:"record",children:"这条记录"}):null]})]}),e.jsx("label",{className:"sr-only",htmlFor:"suiji-question",children:"向随记提问"}),e.jsx("textarea",{id:"suiji-question",value:c,disabled:F||!!S.current,onChange:N=>f(N.target.value),maxLength:4e3,placeholder:"以前有哪些想做、后来放下的事?",className:"min-h-28 resize-y rounded-xl border bg-background p-3 leading-6"}),F?e.jsx("p",{role:"status",className:"text-sm text-muted-foreground",children:"正在检索与回顾,可以继续浏览记录…"}):null,g?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:g}):null,e.jsxs("div",{className:"flex flex-wrap justify-end gap-2",children:[g&&!k?e.jsx(u,{type:"button",variant:"ghost",onClick:()=>{S.current=void 0,v(void 0),b("")},children:"结束此次等待,重新提问"}):null,(o==null?void 0:o.status)==="running"?e.jsxs(e.Fragment,{children:[e.jsx(u,{type:"button",variant:"outline",onClick:()=>void R(),children:"查询进度"}),e.jsx(u,{type:"button",variant:"outline",onClick:()=>void L(),children:"取消回顾"})]}):e.jsx(u,{type:"submit",disabled:k||!c.trim(),children:S.current?"手动确认请求":"发送"})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"对话仅保留在当前页面会话,刷新后不会自动重新执行。服务上的回顾结果保留 30 分钟。"})]}):e.jsxs("section",{className:"flex flex-col gap-3 py-16 text-center",children:[e.jsx("h2",{className:"text-xl",children:"AI 回顾尚未启用"}),e.jsx("p",{className:"text-muted-foreground",children:"当前服务没有可用的回顾模型。记录和待办仍可正常使用。"})]})}function zt({active:a,disabled:t,loading:s,cursor:i,load:r}){const n=x.useRef(null),d=x.useRef(null),l=x.useRef(null),[c,f]=x.useState(!1);return x.useEffect(()=>{const p=n.current,m=d.current;if(!a||t||s||!i||c||!p||!m)return;const o=new IntersectionObserver(([v])=>{v!=null&&v.isIntersecting&&(o.disconnect(),r(!0))},{root:p,rootMargin:"0px 0px 200px 0px"});return o.observe(m),()=>o.disconnect()},[a,t,s,i,c,n,d,r]),{failed:c,scrollContainer:n,trigger:d,begin:(p,m,o)=>p&&(!m||o||l.current===m)?!1:(l.current=p?m:null,f(!1),!0),fail:p=>{p&&(l.current=null,f(!0))}}}function Dt({cursor:a,failed:t,loading:s,trigger:i,onRetry:r}){return e.jsx("div",{ref:i,className:"flex min-h-px justify-center gap-3",children:a&&t?e.jsx(u,{variant:"outline",disabled:s,onClick:r,children:"重试加载"}):null})}function Pt({connection:a,active:t=!0,headerActions:s,onOpenLink:i}){var ze,De,Pe;const{client:r,info:n,store:d}=a,[l]=x.useState(()=>{var h;return new mt(r,d,((h=n.features)==null?void 0:h.workReports)===!0)}),[c,f]=x.useState(!1),[p,m]=x.useState(),[o,v]=x.useState("records"),[k,E]=x.useState(""),[g,b]=x.useState("open"),[S,j]=x.useState(""),[w,C]=x.useState(""),[R,L]=x.useState([]),[F,W]=x.useState(!1),N=Ze(S,{wait:250}),y=x.useRef(0),[q,M]=x.useState([]),[U,$]=x.useState(null),[I,oe]=x.useState(!1),[fe,G]=x.useState(""),[P,Q]=x.useState(),[V,re]=x.useState(),[Oe,Re]=x.useState({kind:"all"}),[xe,me]=x.useState(new Set),[Ie,He]=x.useState(!1),[te,Ke]=x.useState(!1),O=x.useRef(!0),Z=x.useRef(0),ge=x.useRef(!1),ce=x.useRef(void 0),ie=x.useRef(new Map),ve=A(async()=>{if(!(ge.current||!navigator.locks)){ge.current=!0;try{await navigator.locks.request("suiji-editor:"+d.scope,{ifAvailable:!0},async h=>{!h||!O.current||(Ke(!0),await new Promise(T=>{ce.current=T}))})}finally{ge.current=!1}}});x.useEffect(()=>{var T;O.current=!0,ve(),(T=n.features)!=null&&T.workRecords&&l.initialize();const h=ie.current;return()=>{O.current=!1,h.forEach(z=>z.dispose()),l.dispose(),Promise.all([...h.values()].map(z=>z.settled()).concat(l.settled())).finally(()=>{var z;(z=ce.current)==null||z.call(ce),d.close()})}},[ve,d,l,n]);const X=A(async(h=!1)=>{var ae;if(o==="ai"||o==="work"||!le.begin(h,U,I))return;const T=++Z.current;oe(!0),G(""),h||(M([]),$(null));const z=new URLSearchParams;o==="tasks"?(z.set("kind","task"),z.set("taskStatus",g)):k&&z.set("kind",k),o==="trash"&&z.set("trash","true"),N&&z.set("q",N),w&&z.set("tag",w),h&&U&&z.set("cursor",U);try{const[D,_]=await Promise.all([r.request("/api/suiji/v1/records?"+z),h?void 0:r.request("/api/suiji/v1/tags")]);if(!O.current||T!==Z.current)return;_&&L(_.items);const se=await Promise.all(D.items.map(async Y=>await d.get("status:"+Y.id)?Y.id:void 0));if(!O.current||T!==Z.current)return;const J=(ae=n.features)!=null&&ae.browse?D.items.filter(Y=>!Y.material):D.items;M(Y=>h?[...Y,...J.filter(ye=>!Y.some(Je=>Je.id===ye.id))]:J),$(D.nextCursor),me(Y=>new Set([...h?Y:[],...se.filter(ye=>!!ye)]))}catch(D){O.current&&T===Z.current&&(le.fail(h),G(D instanceof Error?D.message:"读取失败"))}finally{O.current&&T===Z.current&&oe(!1)}});x.useEffect(()=>{t&&X()},[X,o,k,g,N,w,t]);const le=zt({active:t,disabled:o==="ai"||o==="work"||!!(P||V),loading:I,cursor:U,load:X}),be=A(h=>{++Z.current,++y.current,M([]),$(null),Q(void 0),o==="ai"&&v("records"),h===w?X():C(h)}),Te=A(async(h,T)=>{const z=Z.current,ae=++y.current;try{const{record:D}=await r.request("/api/suiji/v1/records/"+h),_=await d.get("status:"+h);if(!O.current||z!==Z.current||ae!==y.current)return;me(se=>{const J=new Set(se);return _?J.add(h):J.delete(h),J}),M(se=>se.map(J=>J.id===D.id&&J.version<=D.version?D:J)),Q({record:D,citedVersion:T})}catch(D){O.current&&G(D instanceof Error?D.message:"读取失败")}}),de=A(async(h,T="task",z="")=>{var ae;if(!(!te||h!=null&&h.deletedAt))try{if(h&&await d.get("status:"+h.id))throw new Error("记录操作待确认,请先手动确认");const D=(h==null?void 0:h.id)??"new";let _=ie.current.get(D);if(_&&z&&G("已恢复原有草稿;新结论未覆盖它。请先处理当前草稿,再另存结论。"),!_){const se=await d.get("draft:"+D);if(!O.current)return;const J=se??{id:D,kind:(h==null?void 0:h.kind)??T,material:h==null?void 0:h.material,body:(h==null?void 0:h.body)??z,tags:(h==null?void 0:h.tags)??[],version:h==null?void 0:h.version,existing:(h==null?void 0:h.attachments)??[],files:[]};_=new $e(J,r,d,void 0,((ae=n.features)==null?void 0:ae.correctionHistory)===!0),ie.current.set(D,_),se&&z&&G("已恢复原有草稿;新结论未覆盖它。请先处理当前草稿,再另存结论。"),await _.initialize()}O.current&&re(_)}catch(D){O.current&&G(D instanceof Error?D.message:"草稿读取失败")}}),{acceptRecord:je,editFollowup:We}=yt({client:r,store:d,writable:te,alive:O,models:ie,setEditor:re,setItems:M,setDetail:Q,setMessage:G}),we=kt({client:r,store:d,writable:te,statusBusy:Ie,alive:O,setStatusBusy:He,setMessage:G,setPending:me,acceptRecord:je,setDetail:Q,load:X}),qe=q.filter(h=>!!h.deletedAt==(o==="trash")&&(!w||(h.tags??[]).includes(w))&&(o==="tasks"?h.kind==="task"&&h.taskStatus===g:!k||h.kind===k)&&(o!=="records"||h.taskStatus!=="done"&&h.taskStatus!=="archived"||xe.has(h.id)));return e.jsxs("main",{className:"relative flex h-full min-h-0 flex-col bg-background text-foreground",children:[s&&o!=="ai"&&o!=="work"&&!P&&!V?Xe.createPortal(e.jsx(u,{variant:"ghost",size:"icon","aria-label":I?"刷新中":"刷新",title:"刷新",disabled:I,onClick:()=>void X(),children:e.jsx(Ye,{className:`size-4 ${I?"animate-spin":""}`})}),s):null,e.jsxs("div",{className:P||V?"hidden":"flex min-h-0 flex-1 flex-col",children:[(ze=n.features)!=null&&ze.workRecords?e.jsx("div",{className:o==="work"?"flex min-h-0 flex-1 flex-col":"hidden",children:e.jsx(bt,{model:l,active:o==="work",writable:te,onReview:()=>{m({tab:"work"}),v("ai")}})}):null,e.jsxs("div",{ref:le.scrollContainer,className:o==="work"?"hidden":"min-h-0 flex-1 overflow-y-auto px-5 pt-4",children:[te?null:e.jsxs("div",{className:"flex items-center justify-between gap-4 rounded-xl border p-4 text-sm",children:[e.jsx("p",{children:"另一随记页面正在编辑,当前可浏览。关闭那一页后可接管编辑。"}),e.jsx(u,{variant:"outline",size:"sm",onClick:()=>void ve(),children:"接管编辑"})]}),fe?e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:fe}):null,e.jsxs("div",{hidden:o!=="ai",className:"pb-6",children:[p?e.jsxs(u,{variant:"ghost",onClick:()=>{v(p.tab),Q(p.detail),m(void 0)},children:["返回",p.detail?"原记录":"工作"]}):null,e.jsx(qt,{client:r,info:n,scope:Oe,onScope:Re,onOpen:(h,T)=>void Te(h,T),onSave:(h,T)=>void de(void 0,T,h),writable:te,onLockedChange:f})]}),o!=="ai"&&o!=="work"?e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[o==="tasks"?e.jsxs("label",{className:"flex items-center gap-3 text-sm",children:["状态",e.jsxs("select",{"aria-label":"待办状态",value:g,onChange:h=>b(h.target.value),className:"rounded-xl border bg-card p-2",children:[e.jsx("option",{value:"open",children:"未完成"}),e.jsx("option",{value:"done",children:"已完成"}),e.jsx("option",{value:"archived",children:"不再做"})]})]}):e.jsx("div",{className:"flex items-center gap-3 text-sm",children:e.jsx("div",{role:"group","aria-label":"类型筛选",className:"inline-flex gap-1 rounded-xl bg-secondary p-1",children:[["","全部"],["note","想法"],["task","待办"]].map(([h,T])=>e.jsx(u,{type:"button",size:"sm",variant:k===h?"default":"ghost","aria-pressed":k===h,onClick:()=>E(h),children:T},h))})}),e.jsx(u,{variant:"ghost",size:"icon","aria-label":"搜索记录","aria-pressed":F,onClick:()=>{F&&j(""),W(h=>!h)},children:e.jsx(et,{className:"size-4"})}),F?e.jsx(K,{autoFocus:!0,"aria-label":"搜索原文",placeholder:"搜索正文关键词",value:S,onChange:h=>j(h.target.value),className:"w-full"}):null]}),e.jsx(Nt,{available:R,selected:w,onSelect:be}),e.jsxs("section",{className:"flex flex-col gap-4 pb-20",children:[qe.map(h=>e.jsx(Tt,{record:h,pending:xe.has(h.id),onOpen:()=>void Te(h.id),onOpenLink:i,onTag:be},h.id)),I?e.jsx("p",{role:"status",className:"py-8 text-center text-muted-foreground",children:"正在读取记录…"}):qe.length===0?e.jsxs("div",{className:"flex flex-col gap-3 py-16 text-center",children:[e.jsx("h2",{className:"text-xl",children:S||w?"没有找到匹配的原文":o==="trash"?"回收站为空":"留一点想法在这里"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:S||w?"试试其他标签或更短的关键词。":o==="trash"?"删除的记录会保留在这里,可随时恢复。":"点右下角加号,记下一句想到的事。"})]}):null,e.jsx(Dt,{cursor:U,failed:le.failed,loading:I,trigger:le.trigger,onRetry:()=>void X(!0)})]})]}):null]}),o!=="trash"&&o!=="ai"&&o!=="work"?e.jsx(u,{"aria-label":"新增记录",className:"absolute bottom-20 right-5 size-12 rounded-full shadow-lg",disabled:!te,onClick:()=>void de(),children:e.jsx(tt,{})}):null,e.jsx("nav",{"aria-label":"随记导航",className:"grid shrink-0 grid-cols-4 border-t bg-background px-2 py-2",children:[["records","记录",st],["tasks","待办",pt],["trash","回收站",it],(De=n.features)!=null&&De.workRecords?["work","工作",ut]:["ai","AI",at]].map(([h,T,z])=>e.jsxs("button",{type:"button","aria-current":o===h?"page":void 0,className:`flex flex-col items-center gap-1 rounded-lg py-2 text-xs ${o===h?"bg-secondary text-primary":"text-muted-foreground hover:bg-accent"}`,onClick:()=>{++Z.current,v(h)},children:[e.jsx(z,{className:"size-5"}),T]},h))})]}),P&&!V?e.jsx(It,{onOpenLink:i,...P,client:r,info:n,onFollowup:()=>void We(P.record),onRecord:je,onTag:be,availableTags:R,onTagsChange:h=>void we(P.record,{tags:h}),message:fe,onClose:()=>Q(void 0),onEdit:()=>void de(P.record),onStatus:h=>void we(P.record,{targetStatus:h}),onTrash:h=>void we(P.record,{trashed:h}),onReview:()=>{m({tab:o,detail:P}),c||Re({kind:"record",recordId:P.record.id}),Q(void 0),v("ai")},onRecreate:()=>void de(void 0,"task",P.record.body),writable:te,pending:xe.has(P.record.id),busy:Ie},P.record.id):null,V?e.jsx(Et,{model:V,correctionAvailable:(Pe=n.features)==null?void 0:Pe.correction,availableTags:R,onClose:()=>{V.cancelCorrection(),re(void 0)},onDiscard:()=>{ie.current.delete(V.followupRecordId?"followup:"+V.followupRecordId:V.state.draft.id),V.dispose(),re(void 0)},onFollowupSaved:h=>{const T=h.followup.recordId;ie.current.delete("followup:"+T),V.dispose(),re(void 0),(P==null?void 0:P.record.id)===T&&je({...P.record,followupSummary:h.followupSummary}),X()},onSaved:h=>{var T;(T=n.features)!=null&&T.browse&&h.material?(Q(void 0),G("此素材已保存到浏览,请在新版随记 App 中查看。")):P&&Q({record:h}),ie.current.delete(V.followupRecordId?"followup:"+V.followupRecordId:V.state.draft.id),V.dispose(),re(void 0),X()}}):null]})}function Ut({active:a=!0,accountOnly:t=!1,onClose:s,onOpenLink:i}){const{accounts:r,endpoint:n,setEndpoint:d,username:l,setUsername:c,password:f,setPassword:p,busy:m,message:o,connection:v,needsLogin:k,setNeedsLogin:E,ensure:g,initialize:b,connect:S,switchEnvironment:j,logout:w,editAccount:C,isCurrent:R}=rt(),[L,F]=x.useState(t),[W,N]=x.useState(null),y=x.useRef(!0);x.useEffect(()=>(y.current=!0,g(),()=>{y.current=!1}),[g]),x.useEffect(()=>{v&&F(t)},[v,t]);const q=A(I=>{const oe=v==null?void 0:v.client;i==null||i(I,()=>y.current&&!!oe&&R(oe))}),M=A(async I=>{$&&!window.confirm("放弃当前环境未保存的账户修改?")||await j(I)}),U=r==null?void 0:r.profiles[r.active],$=t&&!!U&&!v&&(n!==U.endpoint||l!==U.username||f!==(U.password??""));return nt($,t&&m&&$),e.jsxs("section",{className:"suiji-theme flex h-full min-h-0 flex-col bg-background text-foreground","aria-label":"随记内容",children:[e.jsxs("header",{className:"flex h-14 shrink-0 items-center gap-2 border-b px-4",children:[L&&v&&!t?e.jsx(u,{variant:"ghost",size:"icon","aria-label":"返回随记",onClick:()=>F(!1),children:e.jsx(ot,{className:"size-4"})}):null,e.jsx("h1",{className:"font-semibold",children:L?"账户设置":"随记"}),(r==null?void 0:r.active)==="development"?e.jsx("span",{className:"rounded bg-secondary px-2 py-0.5 text-xs",children:"开发"}):null,e.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[L?null:e.jsx("div",{ref:N,className:"flex"}),v&&!L?e.jsx(u,{variant:"ghost",size:"icon","aria-label":"随记设置",onClick:()=>F(!0),children:e.jsx(lt,{className:"size-4"})}):null,s?e.jsx(u,{variant:"ghost",size:"icon","aria-label":"关闭随记",onClick:s,children:e.jsx(ct,{className:"size-4"})}):null]})]}),v&&!t?e.jsx("div",{hidden:L,className:"min-h-0 flex-1",children:e.jsx(Pt,{connection:v,active:a,headerActions:W,onOpenLink:i?q:void 0},v.store.scope)}):null,t||L||!v?e.jsxs("div",{className:"min-h-0 flex-1 overflow-y-auto p-5",children:[r?e.jsxs(e.Fragment,{children:[e.jsx("fieldset",{disabled:m,className:"mb-6 flex gap-2","aria-label":"账户环境",children:["production","development"].map(I=>e.jsx(u,{className:"flex-1",variant:r.active===I?"default":"outline","aria-pressed":r.active===I,onClick:()=>void M(I),children:ke(I)},I))}),e.jsx("p",{className:"mb-5 text-sm text-muted-foreground",children:v?"切换环境会保留各自的账户和草稿。":"首次登录后,下次打开会自动连接。"}),v?e.jsxs("div",{className:"flex flex-col gap-4 text-sm",children:[e.jsxs("p",{children:["已登录",ke(r.active),"环境 · ",l]}),e.jsx("p",{className:"break-all text-muted-foreground",children:n}),e.jsx(u,{variant:"outline",disabled:m,onClick:C,children:"修改账户配置"}),e.jsxs(u,{variant:"destructive",disabled:m,onClick:()=>void w(),children:["退出",ke(r.active),"账户"]})]}):k?e.jsxs("form",{className:"flex flex-col gap-5",onSubmit:I=>{I.preventDefault(),S(r,!0)},children:[e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["服务地址",e.jsx(K,{"aria-label":"随记服务地址",type:"url",value:n,required:!0,disabled:m,onChange:I=>d(I.target.value),placeholder:"https://你的随记服务"})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["账号",e.jsx(K,{"aria-label":"随记账号",autoComplete:"username",value:l,required:!0,disabled:m,onChange:I=>c(I.target.value)})]}),e.jsxs("label",{className:"flex flex-col gap-2 text-sm",children:["密码",e.jsx(K,{"aria-label":"随记密码",type:"password",autoComplete:"current-password",value:f,required:!0,disabled:m,onChange:I=>p(I.target.value)})]}),e.jsx(u,{type:"submit",disabled:m,children:m?"正在连接…":"登录随记"})]}):e.jsxs("div",{className:"flex flex-col gap-4 text-sm",children:[e.jsx("p",{children:m?"正在恢复已保存的账户…":"暂时无法连接,账户和草稿已保留。"}),e.jsx(u,{variant:"outline",disabled:m,onClick:()=>E(!0),children:"修改账户配置"})]})]}):null,m?e.jsx("p",{role:"status",className:"mt-4 text-sm",children:"正在连接…"}):null,o?e.jsxs("div",{className:"mt-4 flex flex-col gap-3",children:[e.jsx("p",{role:"alert",className:"text-sm text-destructive",children:o}),e.jsx(u,{variant:"outline",disabled:m,onClick:()=>void b(),children:"重试连接"})]}):null]}):null]})}export{Ut as default};
@@ -1,33 +0,0 @@
1
- .settings-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40;display:flex;background:hsl(var(--background));color:hsl(var(--foreground))}.settings-sidebar{width:208px;flex-shrink:0;display:flex;flex-direction:column;overflow-y:auto;padding:8px;border-right:1px solid hsl(var(--border));background:hsl(var(--muted) / .35)}.settings-back{position:sticky;top:0;z-index:1;flex-shrink:0;background:hsl(var(--background));display:flex;align-items:center;gap:8px;padding:5px 8px;color:hsl(var(--muted-foreground));font-size:12px}.settings-nav{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;border-radius:6px;text-align:left;font-size:13px;line-height:18px}.settings-nav:hover,.settings-nav.active{background:hsl(var(--muted))}.settings-nav.active{font-weight:600}.settings-content{flex:1;min-width:0;overflow:auto;padding:20px 24px;font-size:13px}.settings-wrap{width:100%}.management-wrap{display:flex;flex-direction:column;height:100%;min-height:0}.management-wrap>header{flex-shrink:0}.management-content{flex:1;min-height:0;min-width:0;overflow:auto}.settings-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.settings-tabs button{border-radius:8px;padding:5px 10px;font-size:13px;color:hsl(var(--muted-foreground))}.settings-tabs button[aria-current]{color:hsl(var(--foreground));background:hsl(var(--muted))}.settings-screen section{min-width:0}@media(max-width:1000px){.settings-sidebar{width:196px}.settings-content{padding:16px}}@media(max-width:760px){.settings-sidebar{width:176px;padding:8px}.settings-nav{font-size:12px;gap:6px;padding:5px 8px}.settings-content{padding:12px}}.settings-content>.settings-wrap>header h1{font-size:20px;line-height:1.2}.settings-models [class*=bg-slate-]{background:hsl(var(--muted) / .4)}.settings-models [class*=border-slate-]{border-color:hsl(var(--border))}.settings-models [class*=text-slate-]{color:hsl(var(--muted-foreground))}.settings-models .text-slate-100,.settings-models .text-slate-200,.settings-models .text-white{color:hsl(var(--foreground))}.settings-screen main main{min-height:0}/**
2
- * Copyright (c) 2014 The xterm.js authors. All rights reserved.
3
- * Copyright (c) 2012-2013, Christopher Jeffrey (MIT License)
4
- * https://github.com/chjj/term.js
5
- * @license MIT
6
- *
7
- * Permission is hereby granted, free of charge, to any person obtaining a copy
8
- * of this software and associated documentation files (the "Software"), to deal
9
- * in the Software without restriction, including without limitation the rights
10
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
- * copies of the Software, and to permit persons to whom the Software is
12
- * furnished to do so, subject to the following conditions:
13
- *
14
- * The above copyright notice and this permission notice shall be included in
15
- * all copies or substantial portions of the Software.
16
- *
17
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
- * THE SOFTWARE.
24
- *
25
- * Originally forked from (with the author's permission):
26
- * Fabrice Bellard's javascript vt100 for jslinux:
27
- * http://bellard.org/jslinux/
28
- * Copyright (c) 2011 Fabrice Bellard
29
- * The original design remains. The terminal itself
30
- * has been extended to include xterm CSI codes, among
31
- * other features.
32
- */.xterm{cursor:text;position:relative;-moz-user-select:none;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#fff;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) *::-moz-selection{color:transparent}.xterm .xterm-accessibility-tree:not(.debug) *::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;-webkit-user-select:text;-moz-user-select:text;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:-moz-fit-content;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:double underline;text-decoration:double underline}.xterm-underline-3{-webkit-text-decoration:wavy underline;text-decoration:wavy underline}.xterm-underline-4{-webkit-text-decoration:dotted underline;text-decoration:dotted underline}.xterm-underline-5{-webkit-text-decoration:dashed underline;text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:#0000;transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow, #000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow, #000) 6px 0 6px -6px inset}.terminal-renderer{width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}.terminal-renderer .xterm{height:100%}*,: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: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
33
- */*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:hsl(var(--border))}: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:ui-sans-serif,system-ui,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:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,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}.\!container{width:100%!important}.container{width:100%}@media(min-width:640px){.\!container{max-width:640px!important}.container{max-width:640px}}@media(min-width:768px){.\!container{max-width:768px!important}.container{max-width:768px}}@media(min-width:1024px){.\!container{max-width:1024px!important}.container{max-width:1024px}}@media(min-width:1280px){.\!container{max-width:1280px!important}.container{max-width:1280px}}@media(min-width:1536px){.\!container{max-width:1536px!important}.container{max-width:1536px}}.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}.pointer-events-auto{pointer-events:auto}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.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-x-0{left:0;right:0}.inset-x-4{left:1rem;right:1rem}.inset-y-0{top:0;bottom:0}.-bottom-0\.5{bottom:-.125rem}.-bottom-1{bottom:-.25rem}.-left-\[9999em\]{left:-9999em}.-right-0\.5{right:-.125rem}.-right-1{right:-.25rem}.-right-1\.5{right:-.375rem}.-top-0\.5{top:-.125rem}.-top-1{top:-.25rem}.bottom-0{bottom:0}.bottom-20{bottom:5rem}.bottom-3\.5{bottom:.875rem}.bottom-4{bottom:1rem}.bottom-5{bottom:1.25rem}.bottom-6{bottom:1.5rem}.bottom-full{bottom:100%}.left-0{left:0}.left-0\.5{left:.125rem}.left-1\/2{left:50%}.left-2{left:.5rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[50\%\]{left:50%}.left-auto{left:auto}.right-0{right:0}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-2{right:.5rem}.right-20{right:5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-5{right:1.25rem}.right-6{right:1.5rem}.top-0{top:0}.top-0\.5{top:.125rem}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-2\.5{top:.625rem}.top-20{top:5rem}.top-3{top:.75rem}.top-4{top:1rem}.top-5{top:1.25rem}.top-8{top:2rem}.top-\[22px\]{top:22px}.top-\[50\%\]{top:50%}.top-full{top:100%}.isolate{isolation:isolate}.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-\[70\]{z-index:70}.z-\[80\]{z-index:80}.m-0{margin:0}.m-2{margin:.5rem}.m-4{margin:1rem}.m-auto{margin:auto}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-4{margin-top:1rem;margin-bottom:1rem}.\!mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem}.mb-1\.5{margin-bottom:.375rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-7{margin-bottom:1.75rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-8{margin-left:2rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-auto{margin-right:auto}.mt-0\.5{margin-top:.125rem}.mt-1{margin-top:.25rem}.mt-1\.5{margin-top:.375rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.line-clamp-2{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2}.line-clamp-3{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3}.line-clamp-5{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:5}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.size-1\.5{width:.375rem;height:.375rem}.size-12{width:3rem;height:3rem}.size-3{width:.75rem;height:.75rem}.size-3\.5{width:.875rem;height:.875rem}.size-4{width:1rem;height:1rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.size-7{width:1.75rem;height:1.75rem}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-11{height:2.75rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-28{height:7rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[19px\]{height:19px}.h-\[26px\]{height:26px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-fit{height:-moz-fit-content;height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:6rem}.max-h-40{max-height:10rem}.max-h-48{max-height:12rem}.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-\[--radix-context-menu-content-available-height\]{max-height:var(--radix-context-menu-content-available-height)}.max-h-\[--radix-select-content-available-height\]{max-height:var(--radix-select-content-available-height)}.max-h-\[60vh\]{max-height:60vh}.max-h-\[65dvh\]{max-height:65dvh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[84vh\]{max-height:84vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[86vh\]{max-height:86vh}.max-h-\[90dvh\]{max-height:90dvh}.max-h-\[calc\(100dvh-190px\)\]{max-height:calc(100dvh - 190px)}.max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.max-h-\[min\(720px\,75vh\)\]{max-height:min(720px,75vh)}.max-h-full{max-height:100%}.max-h-none{max-height:none}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-12{min-height:3rem}.min-h-20{min-height:5rem}.min-h-28{min-height:7rem}.min-h-32{min-height:8rem}.min-h-48{min-height:12rem}.min-h-56{min-height:14rem}.min-h-64{min-height:16rem}.min-h-7{min-height:1.75rem}.min-h-72{min-height:18rem}.min-h-80{min-height:20rem}.min-h-\[14rem\]{min-height:14rem}.min-h-\[160px\]{min-height:160px}.min-h-\[320px\]{min-height:320px}.min-h-\[34px\]{min-height:34px}.min-h-\[420px\]{min-height:420px}.min-h-\[42px\]{min-height:42px}.min-h-\[54px\]{min-height:54px}.min-h-\[72px\]{min-height:72px}.min-h-full{min-height:100%}.min-h-px{min-height:1px}.min-h-screen{min-height:100vh}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-52{width:13rem}.w-56{width:14rem}.w-6{width:1.5rem}.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-96{width:24rem}.w-\[18rem\]{width:18rem}.w-\[218px\]{width:218px}.w-\[220px\]{width:220px}.w-\[320px\]{width:320px}.w-\[440px\]{width:440px}.w-\[480px\]{width:480px}.w-\[76px\]{width:76px}.w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.w-\[min\(24rem\,calc\(100vw-2rem\)\)\]{width:min(24rem,calc(100vw - 2rem))}.w-\[min\(48rem\,calc\(100vw-2rem\)\)\]{width:min(48rem,calc(100vw - 2rem))}.w-\[min\(64rem\,100vw\)\]{width:min(64rem,100vw)}.w-\[min\(780px\,calc\(100vw-48px\)\)\]{width:min(780px,calc(100vw - 48px))}.w-\[min\(92vw\,42rem\)\]{width:min(92vw,42rem)}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}.w-screen{width:100vw}.min-w-0{min-width:0px}.min-w-16{min-width:4rem}.min-w-3{min-width:.75rem}.min-w-3\.5{min-width:.875rem}.min-w-4{min-width:1rem}.min-w-40{min-width:10rem}.min-w-7{min-width:1.75rem}.min-w-72{min-width:18rem}.min-w-\[14rem\]{min-width:14rem}.min-w-\[19px\]{min-width:19px}.min-w-\[320px\]{min-width:320px}.min-w-\[720px\]{min-width:720px}.min-w-\[760px\]{min-width:760px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-12{max-width:3rem}.max-w-2xl{max-width:42rem}.max-w-36{max-width:9rem}.max-w-3xl{max-width:48rem}.max-w-40{max-width:10rem}.max-w-44{max-width:11rem}.max-w-48{max-width:12rem}.max-w-4xl{max-width:56rem}.max-w-56{max-width:14rem}.max-w-64{max-width:16rem}.max-w-\[14rem\]{max-width:14rem}.max-w-\[160px\]{max-width:160px}.max-w-\[18rem\]{max-width:18rem}.max-w-\[220px\]{max-width:220px}.max-w-\[80\%\]{max-width:80%}.max-w-\[calc\(100vw-16px\)\]{max-width:calc(100vw - 16px)}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-\[calc\(100vw-2rem\)\]{max-width:calc(100vw - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:32rem}.max-w-md{max-width:28rem}.max-w-none{max-width:none}.max-w-sm{max-width:24rem}.max-w-xl{max-width:36rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.basis-72{flex-basis:18rem}.table-fixed{table-layout:fixed}.origin-\[--radix-context-menu-content-transform-origin\]{transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\[--radix-select-content-transform-origin\]{transform-origin:var(--radix-select-content-transform-origin)}.-translate-x-1{--tw-translate-x: -.25rem;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-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-y-1{--tw-translate-y: -.25rem;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-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-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-\[-50\%\]{--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-y-0{--tw-translate-y: 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-y-\[-50\%\]{--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))}.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))}.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))}@keyframes ping{75%,to{transform:scale(2);opacity:0}}.animate-ping{animation:ping 1s cubic-bezier(0,0,.2,1) infinite}@keyframes pulse{50%{opacity:.5}}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:spin 1s linear infinite}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-text{-webkit-user-select:text;-moz-user-select:text;user-select:text}.resize-none{resize:none}.resize-y{resize:vertical}.resize{resize:both}.scroll-m-6{scroll-margin:1.5rem}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,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-\[1\.3fr_0\.6fr_1\.6fr_0\.8fr_1fr_24px\]{grid-template-columns:1.3fr .6fr 1.6fr .8fr 1fr 24px}.grid-cols-\[18px_90px_minmax\(0\,1fr\)\]{grid-template-columns:18px 90px minmax(0,1fr)}.grid-cols-\[220px_minmax\(0\,1fr\)\]{grid-template-columns:220px minmax(0,1fr)}.grid-cols-\[240px_minmax\(0\,1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.grid-cols-\[300px_minmax\(0\,1fr\)\]{grid-template-columns:300px minmax(0,1fr)}.grid-cols-\[32px_minmax\(0\,1fr\)\]{grid-template-columns:32px minmax(0,1fr)}.grid-cols-\[4rem_minmax\(0\,1fr\)\]{grid-template-columns:4rem minmax(0,1fr)}.grid-cols-\[5\.75rem_minmax\(0\,1fr\)\]{grid-template-columns:5.75rem minmax(0,1fr)}.grid-cols-\[56px_minmax\(0\,1fr\)\]{grid-template-columns:56px minmax(0,1fr)}.grid-cols-\[80px_1fr\]{grid-template-columns:80px 1fr}.grid-cols-\[8rem_minmax\(0\,1fr\)\]{grid-template-columns:8rem minmax(0,1fr)}.grid-cols-\[9rem_minmax\(0\,1fr\)\]{grid-template-columns:9rem minmax(0,1fr)}.grid-cols-\[auto_minmax\(0\,1fr\)_auto\]{grid-template-columns:auto minmax(0,1fr) auto}.grid-cols-\[minmax\(0\,1fr\)_repeat\(3\,auto\)\]{grid-template-columns:minmax(0,1fr) repeat(3,auto)}.grid-cols-\[minmax\(190px\,0\.38fr\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(190px,.38fr) minmax(0,1fr)}.grid-cols-\[minmax\(260px\,320px\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(260px,320px) minmax(0,1fr)}.grid-rows-none{grid-template-rows:none}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-center{align-content:center}.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-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-7{gap:1.75rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.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-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-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-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))}.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-border\/50>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .5)}.divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border) / .6)}.divide-slate-800>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(30 41 59 / var(--tw-divide-opacity, 1))}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.self-center{align-self:center}.self-stretch{align-self:stretch}.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-y-hidden{overflow-y:hidden}.overscroll-contain{overscroll-behavior:contain}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-\[1\.25rem\]{border-radius:1.25rem}.rounded-\[1\.75rem\]{border-radius:1.75rem}.rounded-\[10px\]{border-radius:10px}.rounded-\[2rem\]{border-radius:2rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-sm{border-radius:.125rem}.rounded-xl{border-radius:.75rem}.rounded-l-md{border-top-left-radius:.375rem;border-bottom-left-radius:.375rem}.rounded-l-xl{border-top-left-radius:.75rem;border-bottom-left-radius:.75rem}.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-0{border-left-width:0px}.border-l-2{border-left-width:2px}.border-r{border-right-width:1px}.border-r-0{border-right-width:0px}.border-r-2{border-right-width:2px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-amber-200{--tw-border-opacity: 1;border-color:rgb(253 230 138 / var(--tw-border-opacity, 1))}.border-amber-400\/25{border-color:#fbbf2440}.border-amber-500\/20{border-color:#f59e0b33}.border-amber-500\/25{border-color:#f59e0b40}.border-amber-500\/30{border-color:#f59e0b4d}.border-amber-500\/35{border-color:#f59e0b59}.border-amber-500\/40{border-color:#f59e0b66}.border-amber-500\/50{border-color:#f59e0b80}.border-amber-700{--tw-border-opacity: 1;border-color:rgb(180 83 9 / var(--tw-border-opacity, 1))}.border-amber-800\/60{border-color:#92400e99}.border-amber-800\/70{border-color:#92400eb3}.border-amber-800\/80{border-color:#92400ecc}.border-amber-900{--tw-border-opacity: 1;border-color:rgb(120 53 15 / var(--tw-border-opacity, 1))}.border-amber-900\/50{border-color:#78350f80}.border-amber-900\/60{border-color:#78350f99}.border-amber-900\/80{border-color:#78350fcc}.border-background{border-color:hsl(var(--background))}.border-border{border-color:hsl(var(--border))}.border-border\/50{border-color:hsl(var(--border) / .5)}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-cyan-200{--tw-border-opacity: 1;border-color:rgb(165 243 252 / var(--tw-border-opacity, 1))}.border-cyan-400\/40{border-color:#22d3ee66}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-emerald-500\/30{border-color:#10b9814d}.border-emerald-500\/40{border-color:#10b98166}.border-emerald-600\/40{border-color:#05966966}.border-input{border-color:hsl(var(--input))}.border-orange-500\/30{border-color:#f973164d}.border-primary{border-color:hsl(var(--primary))}.border-primary\/20{border-color:hsl(var(--primary) / .2)}.border-primary\/40{border-color:hsl(var(--primary) / .4)}.border-red-500\/30{border-color:#ef44444d}.border-red-500\/40{border-color:#ef444466}.border-red-500\/50{border-color:#ef444480}.border-rose-500\/30{border-color:#f43f5e4d}.border-rose-700{--tw-border-opacity: 1;border-color:rgb(190 18 60 / var(--tw-border-opacity, 1))}.border-rose-900{--tw-border-opacity: 1;border-color:rgb(136 19 55 / var(--tw-border-opacity, 1))}.border-rose-900\/60{border-color:#88133799}.border-rose-900\/70{border-color:#881337b3}.border-sky-300{--tw-border-opacity: 1;border-color:rgb(125 211 252 / var(--tw-border-opacity, 1))}.border-sky-400{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.border-sky-500\/60{border-color:#0ea5e999}.border-sky-500\/70{border-color:#0ea5e9b3}.border-sky-700\/70{border-color:#0369a1b3}.border-sky-800\/60{border-color:#07598599}.border-sky-900{--tw-border-opacity: 1;border-color:rgb(12 74 110 / var(--tw-border-opacity, 1))}.border-sky-900\/70{border-color:#0c4a6eb3}.border-slate-100{--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.border-slate-500{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.border-slate-600{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.border-slate-700{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.border-slate-700\/70{border-color:#334155b3}.border-slate-700\/90{border-color:#334155e6}.border-slate-800{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.border-slate-800\/80{border-color:#1e293bcc}.border-transparent{border-color:transparent}.bg-\[\#07111f\]\/95{background-color:#07111ff2}.bg-\[\#0b1220\]{--tw-bg-opacity: 1;background-color:rgb(11 18 32 / var(--tw-bg-opacity, 1))}.bg-\[\#30d158\]{--tw-bg-opacity: 1;background-color:rgb(48 209 88 / var(--tw-bg-opacity, 1))}.bg-\[hsl\(var\(--primary\)\)\]{background-color:hsl(var(--primary))}.bg-accent{background-color:hsl(var(--accent))}.bg-amber-400{--tw-bg-opacity: 1;background-color:rgb(251 191 36 / var(--tw-bg-opacity, 1))}.bg-amber-400\/20{background-color:#fbbf2433}.bg-amber-50{--tw-bg-opacity: 1;background-color:rgb(255 251 235 / var(--tw-bg-opacity, 1))}.bg-amber-500{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.bg-amber-500\/10{background-color:#f59e0b1a}.bg-amber-500\/15{background-color:#f59e0b26}.bg-amber-500\/5{background-color:#f59e0b0d}.bg-amber-600{--tw-bg-opacity: 1;background-color:rgb(217 119 6 / var(--tw-bg-opacity, 1))}.bg-amber-950\/20{background-color:#451a0333}.bg-amber-950\/30{background-color:#451a034d}.bg-background{background-color:hsl(var(--background))}.bg-background\/45{background-color:hsl(var(--background) / .45)}.bg-background\/55{background-color:hsl(var(--background) / .55)}.bg-background\/60{background-color:hsl(var(--background) / .6)}.bg-background\/70{background-color:hsl(var(--background) / .7)}.bg-background\/80{background-color:hsl(var(--background) / .8)}.bg-background\/95{background-color:hsl(var(--background) / .95)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/30{background-color:#0000004d}.bg-black\/35{background-color:#00000059}.bg-black\/45{background-color:#00000073}.bg-black\/60{background-color:#0009}.bg-black\/80{background-color:#000c}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgb(219 234 254 / var(--tw-bg-opacity, 1))}.bg-border{background-color:hsl(var(--border))}.bg-border\/60{background-color:hsl(var(--border) / .6)}.bg-card{background-color:hsl(var(--card))}.bg-card\/50{background-color:hsl(var(--card) / .5)}.bg-card\/55{background-color:hsl(var(--card) / .55)}.bg-card\/60{background-color:hsl(var(--card) / .6)}.bg-card\/70{background-color:hsl(var(--card) / .7)}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/85{background-color:hsl(var(--card) / .85)}.bg-card\/90{background-color:hsl(var(--card) / .9)}.bg-cyan-400{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity, 1))}.bg-cyan-500\/15{background-color:#06b6d426}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.bg-destructive\/15{background-color:hsl(var(--destructive) / .15)}.bg-destructive\/5{background-color:hsl(var(--destructive) / .05)}.bg-emerald-100{--tw-bg-opacity: 1;background-color:rgb(209 250 229 / var(--tw-bg-opacity, 1))}.bg-emerald-300{--tw-bg-opacity: 1;background-color:rgb(110 231 183 / var(--tw-bg-opacity, 1))}.bg-emerald-400{--tw-bg-opacity: 1;background-color:rgb(52 211 153 / var(--tw-bg-opacity, 1))}.bg-emerald-50\/40{background-color:#ecfdf566}.bg-emerald-500{--tw-bg-opacity: 1;background-color:rgb(16 185 129 / var(--tw-bg-opacity, 1))}.bg-emerald-500\/10{background-color:#10b9811a}.bg-emerald-500\/15{background-color:#10b98126}.bg-emerald-950\/20{background-color:#022c2233}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/15{background-color:hsl(var(--muted) / .15)}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/35{background-color:hsl(var(--muted) / .35)}.bg-muted\/40{background-color:hsl(var(--muted) / .4)}.bg-muted\/45{background-color:hsl(var(--muted) / .45)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/55{background-color:hsl(var(--muted) / .55)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-muted\/70{background-color:hsl(var(--muted) / .7)}.bg-neutral-900{--tw-bg-opacity: 1;background-color:rgb(23 23 23 / var(--tw-bg-opacity, 1))}.bg-orange-100{--tw-bg-opacity: 1;background-color:rgb(255 237 213 / var(--tw-bg-opacity, 1))}.bg-orange-500\/5{background-color:#f973160d}.bg-orange-700{--tw-bg-opacity: 1;background-color:rgb(194 65 12 / var(--tw-bg-opacity, 1))}.bg-pink-100{--tw-bg-opacity: 1;background-color:rgb(252 231 243 / var(--tw-bg-opacity, 1))}.bg-popover{background-color:hsl(var(--popover))}.bg-popover\/95{background-color:hsl(var(--popover) / .95)}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/15{background-color:hsl(var(--primary) / .15)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-primary\/\[0\.04\]{background-color:hsl(var(--primary) / .04)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-red-400{--tw-bg-opacity: 1;background-color:rgb(248 113 113 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-red-600{--tw-bg-opacity: 1;background-color:rgb(220 38 38 / var(--tw-bg-opacity, 1))}.bg-red-900{--tw-bg-opacity: 1;background-color:rgb(127 29 29 / var(--tw-bg-opacity, 1))}.bg-rose-400{--tw-bg-opacity: 1;background-color:rgb(251 113 133 / var(--tw-bg-opacity, 1))}.bg-rose-500{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.bg-rose-500\/10{background-color:#f43f5e1a}.bg-rose-500\/15{background-color:#f43f5e26}.bg-rose-600{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1))}.bg-rose-950\/30{background-color:#4c05194d}.bg-rose-950\/40{background-color:#4c051966}.bg-rose-950\/90{background-color:#4c0519e6}.bg-rose-950\/95{background-color:#4c0519f2}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-400{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.bg-sky-500\/10{background-color:#0ea5e91a}.bg-sky-500\/15{background-color:#0ea5e926}.bg-sky-500\/20{background-color:#0ea5e933}.bg-sky-600{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.bg-sky-700{--tw-bg-opacity: 1;background-color:rgb(3 105 161 / var(--tw-bg-opacity, 1))}.bg-sky-950{--tw-bg-opacity: 1;background-color:rgb(8 47 73 / var(--tw-bg-opacity, 1))}.bg-sky-950\/20{background-color:#082f4933}.bg-sky-950\/30{background-color:#082f494d}.bg-sky-950\/35{background-color:#082f4959}.bg-sky-950\/70{background-color:#082f49b3}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / var(--tw-bg-opacity, 1))}.bg-slate-400{--tw-bg-opacity: 1;background-color:rgb(148 163 184 / var(--tw-bg-opacity, 1))}.bg-slate-500{--tw-bg-opacity: 1;background-color:rgb(100 116 139 / var(--tw-bg-opacity, 1))}.bg-slate-500\/15{background-color:#64748b26}.bg-slate-600{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.bg-slate-700{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.bg-slate-700\/25{background-color:#33415540}.bg-slate-700\/60{background-color:#33415599}.bg-slate-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-800\/60{background-color:#1e293b99}.bg-slate-800\/80{background-color:#1e293bcc}.bg-slate-900{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.bg-slate-900\/35{background-color:#0f172a59}.bg-slate-900\/40{background-color:#0f172a66}.bg-slate-900\/50{background-color:#0f172a80}.bg-slate-900\/60{background-color:#0f172a99}.bg-slate-900\/70{background-color:#0f172ab3}.bg-slate-900\/80{background-color:#0f172acc}.bg-slate-900\/90{background-color:#0f172ae6}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.bg-slate-950\/30{background-color:#0206174d}.bg-slate-950\/40{background-color:#02061766}.bg-slate-950\/50{background-color:#02061780}.bg-slate-950\/60{background-color:#02061799}.bg-slate-950\/80{background-color:#020617cc}.bg-slate-950\/90{background-color:#020617e6}.bg-slate-950\/95{background-color:#020617f2}.bg-stone-100{--tw-bg-opacity: 1;background-color:rgb(245 245 244 / var(--tw-bg-opacity, 1))}.bg-teal-100{--tw-bg-opacity: 1;background-color:rgb(204 251 241 / var(--tw-bg-opacity, 1))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-\[radial-gradient\(circle_at_top\,rgba\(70\,130\,145\,0\.18\)\,transparent_30\%\)\,radial-gradient\(circle_at_bottom_left\,rgba\(195\,172\,135\,0\.16\)\,transparent_35\%\)\]{background-image:radial-gradient(circle at top,rgba(70,130,145,.18),transparent 30%),radial-gradient(circle at bottom left,rgba(195,172,135,.16),transparent 35%)}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-stone-100{--tw-gradient-from: #f5f5f4 var(--tw-gradient-from-position);--tw-gradient-to: rgb(245 245 244 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-neutral-900{--tw-gradient-to: #171717 var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.fill-sky-400{fill:#38bdf8}.fill-sky-400\/30{fill:#38bdf84d}.object-contain{-o-object-fit:contain;object-fit:contain}.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-7{padding:1.75rem}.p-8{padding:2rem}.px-0{padding-left:0;padding-right:0}.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-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-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-8{padding-left:2rem;padding-right:2rem}.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-3{padding-top:.75rem;padding-bottom:.75rem}.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-\[5px\]{padding-top:5px;padding-bottom:5px}.pb-1{padding-bottom:.25rem}.pb-1\.5{padding-bottom:.375rem}.pb-2{padding-bottom:.5rem}.pb-20{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}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-3{padding-left:.75rem}.pl-4{padding-left:1rem}.pl-5{padding-left:1.25rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-14{padding-right:3.5rem}.pr-2{padding-right:.5rem}.pr-3{padding-right:.75rem}.pt-1{padding-top:.25rem}.pt-1\.5{padding-top:.375rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pt-7{padding-top:1.75rem}.pt-9{padding-top:2.25rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[0\.62rem\]{font-size:.62rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.68rem\]{font-size:.68rem}.text-\[0\.72rem\]{font-size:.72rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.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-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.normal-case{text-transform:none}.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-3{line-height:.75rem}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-7{line-height:1.75rem}.leading-8{line-height:2rem}.leading-\[18px\]{line-height:18px}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[-0\.01em\]{letter-spacing:-.01em}.tracking-\[0\.14em\]{letter-spacing:.14em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.24em\]{letter-spacing:.24em}.tracking-\[0\.28em\]{letter-spacing:.28em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-\[0\.38em\]{letter-spacing:.38em}.tracking-\[0\.3em\]{letter-spacing:.3em}.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-\[\#07140a\]{--tw-text-opacity: 1;color:rgb(7 20 10 / var(--tw-text-opacity, 1))}.text-\[hsl\(var\(--primary\)\)\]{color:hsl(var(--primary))}.text-amber-100{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.text-amber-200{--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.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-amber-400\/80{color:#fbbf24cc}.text-amber-500{--tw-text-opacity: 1;color:rgb(245 158 11 / var(--tw-text-opacity, 1))}.text-amber-600{--tw-text-opacity: 1;color:rgb(217 119 6 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-800{--tw-text-opacity: 1;color:rgb(146 64 14 / var(--tw-text-opacity, 1))}.text-amber-900{--tw-text-opacity: 1;color:rgb(120 53 15 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-900{--tw-text-opacity: 1;color:rgb(30 58 138 / var(--tw-text-opacity, 1))}.text-cyan-300{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.text-cyan-400{--tw-text-opacity: 1;color:rgb(34 211 238 / var(--tw-text-opacity, 1))}.text-cyan-50{--tw-text-opacity: 1;color:rgb(236 254 255 / var(--tw-text-opacity, 1))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-200{--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.text-emerald-200\/70{color:#a7f3d0b3}.text-emerald-300{--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.text-emerald-400{--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-700{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.text-emerald-900{--tw-text-opacity: 1;color:rgb(6 78 59 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-indigo-300{--tw-text-opacity: 1;color:rgb(165 180 252 / var(--tw-text-opacity, 1))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/70{color:hsl(var(--muted-foreground) / .7)}.text-muted-foreground\/75{color:hsl(var(--muted-foreground) / .75)}.text-muted-foreground\/80{color:hsl(var(--muted-foreground) / .8)}.text-orange-300{--tw-text-opacity: 1;color:rgb(253 186 116 / var(--tw-text-opacity, 1))}.text-orange-400{--tw-text-opacity: 1;color:rgb(251 146 60 / var(--tw-text-opacity, 1))}.text-orange-900{--tw-text-opacity: 1;color:rgb(124 45 18 / var(--tw-text-opacity, 1))}.text-pink-900{--tw-text-opacity: 1;color:rgb(131 24 67 / var(--tw-text-opacity, 1))}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-900{--tw-text-opacity: 1;color:rgb(88 28 135 / var(--tw-text-opacity, 1))}.text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.text-red-700{--tw-text-opacity: 1;color:rgb(185 28 28 / var(--tw-text-opacity, 1))}.text-rose-100{--tw-text-opacity: 1;color:rgb(255 228 230 / var(--tw-text-opacity, 1))}.text-rose-200{--tw-text-opacity: 1;color:rgb(254 205 211 / 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-rose-600{--tw-text-opacity: 1;color:rgb(225 29 72 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sky-100{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.text-sky-200{--tw-text-opacity: 1;color:rgb(186 230 253 / 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-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.text-slate-400{--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity, 1))}.text-slate-500{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.text-slate-600{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.text-slate-700{--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.text-slate-950{--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.text-teal-900{--tw-text-opacity: 1;color:rgb(19 78 74 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-yellow-500{--tw-text-opacity: 1;color:rgb(234 179 8 / var(--tw-text-opacity, 1))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.decoration-dotted{text-decoration-style:dotted}.underline-offset-4{text-underline-offset:4px}.accent-primary{accent-color:hsl(var(--primary))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.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-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px 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-\[-18px_18px_55px_rgba\(0\,0\,0\,0\.42\)\]{--tw-shadow: -18px 18px 55px rgba(0,0,0,.42);--tw-shadow-colored: -18px 18px 55px 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-\[0_0_10px_rgba\(34\,211\,238\,0\.75\)\]{--tw-shadow: 0 0 10px rgba(34,211,238,.75);--tw-shadow-colored: 0 0 10px 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-\[0_0_8px_rgba\(251\,191\,36\,0\.55\)\]{--tw-shadow: 0 0 8px rgba(251,191,36,.55);--tw-shadow-colored: 0 0 8px 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-\[0_12px_28px_-24px_rgba\(15\,23\,42\,0\.95\)\]{--tw-shadow: 0 12px 28px -24px rgba(15,23,42,.95);--tw-shadow-colored: 0 12px 28px -24px 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-\[0_16px_40px_-22px_hsl\(var\(--primary\)\/0\.8\)\]{--tw-shadow: 0 16px 40px -22px hsl(var(--primary)/.8);--tw-shadow-colored: 0 16px 40px -22px 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-\[0_18px_44px_-30px_rgba\(15\,23\,42\,0\.9\)\]{--tw-shadow: 0 18px 44px -30px rgba(15,23,42,.9);--tw-shadow-colored: 0 18px 44px -30px 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-\[0_18px_70px_-54px_rgba\(17\,24\,39\,0\.75\)\]{--tw-shadow: 0 18px 70px -54px rgba(17,24,39,.75);--tw-shadow-colored: 0 18px 70px -54px 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-\[0_20px_80px_-64px_rgba\(17\,24\,39\,0\.8\)\]{--tw-shadow: 0 20px 80px -64px rgba(17,24,39,.8);--tw-shadow-colored: 0 20px 80px -64px 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-\[0_24px_80px_-36px_rgba\(17\,24\,39\,0\.8\)\]{--tw-shadow: 0 24px 80px -36px rgba(17,24,39,.8);--tw-shadow-colored: 0 24px 80px -36px 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-\[0_24px_80px_rgba\(0\,0\,0\,0\.55\)\]{--tw-shadow: 0 24px 80px rgba(0,0,0,.55);--tw-shadow-colored: 0 24px 80px 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-\[0_24px_90px_-58px_rgba\(17\,24\,39\,0\.75\)\]{--tw-shadow: 0 24px 90px -58px rgba(17,24,39,.75);--tw-shadow-colored: 0 24px 90px -58px 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-\[0_28px_90px_-40px_rgba\(15\,23\,42\,0\.82\)\]{--tw-shadow: 0 28px 90px -40px rgba(15,23,42,.82);--tw-shadow-colored: 0 28px 90px -40px 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-\[0_34px_120px_-72px_rgba\(15\,23\,42\,0\.92\)\]{--tw-shadow: 0 34px 120px -72px rgba(15,23,42,.92);--tw-shadow-colored: 0 34px 120px -72px 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-\[0_34px_120px_-72px_rgba\(17\,24\,39\,0\.82\)\]{--tw-shadow: 0 34px 120px -72px rgba(17,24,39,.82);--tw-shadow-colored: 0 34px 120px -72px 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-\[inset_0_1px_0_rgba\(148\,163\,184\,0\.18\)\]{--tw-shadow: inset 0 1px 0 rgba(148,163,184,.18);--tw-shadow-colored: inset 0 1px 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-\[inset_0_1px_0_rgba\(255\,255\,255\,0\.03\)\]{--tw-shadow: inset 0 1px 0 rgba(255,255,255,.03);--tw-shadow-colored: inset 0 1px 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-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-md{--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)}.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-slate-950\/30{--tw-shadow-color: rgb(2 6 23 / .3);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-950\/40{--tw-shadow-color: rgb(2 6 23 / .4);--tw-shadow: var(--tw-shadow-colored)}.shadow-slate-950\/45{--tw-shadow-color: rgb(2 6 23 / .45);--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-1{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.ring-primary{--tw-ring-color: hsl(var(--primary))}.ring-sky-400\/70{--tw-ring-color: rgb(56 189 248 / .7)}.ring-sky-800{--tw-ring-opacity: 1;--tw-ring-color: rgb(7 89 133 / var(--tw-ring-opacity, 1))}.ring-slate-950{--tw-ring-opacity: 1;--tw-ring-color: rgb(2 6 23 / var(--tw-ring-opacity, 1))}.ring-offset-background{--tw-ring-offset-color: hsl(var(--background))}.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)}.drop-shadow{--tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / .1)) drop-shadow(0 1px 1px rgb(0 0 0 / .06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert: invert(100%);filter: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{--tw-backdrop-blur: blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia)}.backdrop-blur-\[1px\]{--tw-backdrop-blur: blur(1px);-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)}.backdrop-blur-xl{--tw-backdrop-blur: blur(24px);-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-\[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}.delay-150{transition-delay:.15s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[contain-intrinsic-size\:auto_180px\]{contain-intrinsic-size:auto 180px}.\[content-visibility\:auto\]{content-visibility:auto}.\[overflow-anchor\:none\]{overflow-anchor:none}.\[scrollbar-width\:none\]{scrollbar-width:none}.\[writing-mode\:vertical-rl\]{writing-mode:vertical-rl}:root{--background: 40 24% 96%;--foreground: 210 22% 13%;--card: 0 0% 100%;--card-foreground: 210 22% 13%;--popover: 0 0% 100%;--popover-foreground: 210 22% 13%;--primary: 191 52% 32%;--primary-foreground: 0 0% 100%;--secondary: 42 16% 90%;--secondary-foreground: 210 22% 13%;--destructive: 0 84% 60%;--destructive-foreground: 0 0% 100%;--muted: 42 16% 90%;--muted-foreground: 212 13% 36%;--accent: 42 16% 90%;--accent-foreground: 210 22% 13%;--border: 38 16% 80%;--input: 38 16% 80%;--ring: 191 52% 32%}.dark{--background: 210 17% 10%;--foreground: 42 32% 95%;--card: 215 18% 14%;--card-foreground: 42 32% 95%;--popover: 215 18% 14%;--popover-foreground: 42 32% 95%;--primary: 190 46% 56%;--primary-foreground: 210 17% 10%;--secondary: 214 14% 18%;--secondary-foreground: 42 32% 95%;--destructive: 0 63% 31%;--destructive-foreground: 42 32% 95%;--muted: 214 14% 18%;--muted-foreground: 42 12% 74%;--accent: 214 14% 18%;--accent-foreground: 42 32% 95%;--border: 214 14% 22%;--input: 214 14% 22%;--ring: 190 46% 56%}*{box-sizing:border-box}html{width:100%;min-height:100%;overflow-x:hidden}body{margin:0;width:100%;max-width:100%;min-height:100vh;min-height:100dvh;overflow-x:hidden;color:hsl(var(--foreground));background:radial-gradient(circle at top,rgba(80,132,142,.18),transparent 28%),radial-gradient(circle at bottom left,rgba(210,178,130,.16),transparent 30%),hsl(var(--background));font-family:ui-sans-serif,system-ui,sans-serif;text-rendering:optimizeLegibility}#root{width:100%;max-width:100%;min-height:100vh;min-height:100dvh;overflow-x:hidden}button,input,textarea,iframe,canvas{font:inherit}::-moz-selection{background:#3a7a8433}::selection{background:#3a7a8433}@keyframes fade-rise{0%{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}@keyframes scale-fade{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes panel-in{0%{opacity:0;transform:translate(18px)}to{opacity:1;transform:translate(0)}}.animate-fade-rise{animation:fade-rise .56s cubic-bezier(.22,1,.36,1) both}.animate-scale-fade{animation:scale-fade .18s cubic-bezier(.22,1,.36,1) both}.animate-panel-in{animation:panel-in .26s cubic-bezier(.22,1,.36,1) both}@property --shimmer-track-height{syntax: "<length>"; inherits: true; initial-value: 200px;}@property --shimmer-angle{syntax: "<angle>"; inherits: true; initial-value: 15deg;}@keyframes tw-shimmer{0%{background-position:100% 0}}.shimmer{--_gradient-width: calc( var(--_spread) + var(--shimmer-track-height) * tan(var(--shimmer-angle)) );--_active-distance: calc( var(--shimmer-track-width, 200px) + var(--_gradient-width) );--_duration: var( --shimmer-duration, calc(var(--_active-distance) / var(--_speed) / 1px * 1000) );--_repeat-delay: var(--shimmer-repeat-delay, calc(20000 / var(--_speed)));--_repeat-delay-px: calc( var(--_repeat-delay) * var(--_active-distance) / var(--_duration) );--_xy-offset-px: calc( (var(--shimmer-x, 0) + var(--shimmer-y, 0) * tan(var(--shimmer-angle))) * 1px );--_bg-width: calc( 100% + var(--shimmer-track-width, 100%) + var(--_gradient-width) + var(--_repeat-delay-px) );--_position: calc( var( --shimmer-track-width, (100% - var(--_gradient-width) - var(--_repeat-delay-px)) / 2 ) + var(--_gradient-width) / 2 + var(--_repeat-delay-px) - var(--_xy-offset-px) );--_mix-96: color-mix(in oklch, var(--_fg), var(--_bg) 96%);--_mix-83: color-mix(in oklch, var(--_fg), var(--_bg) 83%);--_mix-67: color-mix(in oklch, var(--_fg), var(--_bg) 67%);--_mix-50: color-mix(in oklch, var(--_fg), var(--_bg) 50%);--_mix-33: color-mix(in oklch, var(--_fg), var(--_bg) 33%);--_mix-17: color-mix(in oklch, var(--_fg), var(--_bg) 17%);--_mix-4: color-mix(in oklch, var(--_fg), var(--_bg) 4%);background:linear-gradient(calc(90deg + var(--shimmer-angle)),var(--_bg) calc(var(--_position) - var(--_spread) * .5),var(--_mix-96) calc(var(--_position) - var(--_spread) * .44),var(--_mix-83) calc(var(--_position) - var(--_spread) * .37),var(--_mix-67) calc(var(--_position) - var(--_spread) * .31),var(--_mix-50) calc(var(--_position) - var(--_spread) * .25),var(--_mix-33) calc(var(--_position) - var(--_spread) * .19),var(--_mix-17) calc(var(--_position) - var(--_spread) * .12),var(--_mix-4) calc(var(--_position) - var(--_spread) * .06),var(--_fg) var(--_position),var(--_mix-4) calc(var(--_position) + var(--_spread) * .06),var(--_mix-17) calc(var(--_position) + var(--_spread) * .12),var(--_mix-33) calc(var(--_position) + var(--_spread) * .19),var(--_mix-50) calc(var(--_position) + var(--_spread) * .25),var(--_mix-67) calc(var(--_position) + var(--_spread) * .31),var(--_mix-83) calc(var(--_position) + var(--_spread) * .37),var(--_mix-96) calc(var(--_position) + var(--_spread) * .44),var(--_bg) calc(var(--_position) + var(--_spread) * .5)) 0 0 / var(--_bg-width) 100% no-repeat;animation:tw-shimmer 1s linear 0s infinite backwards;animation-duration:calc((var(--_duration) + var(--_repeat-delay)) * 1ms)}.shimmer:not(.shimmer-bg){--_speed: var(--shimmer-speed, 200);--_spread: var(--shimmer-spread, calc(4ch + 80px) );--_bg: currentColor;--_fg: var(--shimmer-color, rgb(255 255 255 / .28));background-clip:text;-webkit-background-clip:text;-webkit-text-fill-color:transparent}.dark .shimmer:not(.shimmer-bg){--_fg: var(--shimmer-color, rgb(255 255 255 / .68))}.shimmer-bg{--_speed: var(--shimmer-speed, 1000);--_spread: var(--shimmer-spread, 480px);--_bg: transparent;--_fg: var(--shimmer-color, rgb(0 0 0 / .06))}.dark .shimmer-bg{--_fg: var(--shimmer-color, rgb(0 0 0 / .3))}.shimmer-invert:not(.shimmer-bg){--shimmer-color: rgb(255 255 255 / .72)}.dark .shimmer-invert:not(.shimmer-bg){--shimmer-color: rgb(255 255 255 / .22)}@supports (color: oklch(from currentColor l c h)){.shimmer:not(.shimmer-bg){--_fg: var( --shimmer-color, oklch(from currentColor l c h / calc(alpha/5) ) )}.dark .shimmer:not(.shimmer-bg){--_fg: var( --shimmer-color, oklch(from currentColor max(.8, calc(l + .4) ) c h / calc(alpha + .4) ) )}.shimmer-bg{--_fg: var(--shimmer-color, oklch(from currentColor 0 c h / .06))}.dark .shimmer-bg{--_fg: var(--shimmer-color, oklch(from currentColor 0 c h / .3))}.shimmer-invert:not(.shimmer-bg){--shimmer-color: oklch( from currentColor min( calc(l - .4) , .2) c h / calc(alpha + .4) )}.dark .shimmer-invert:not(.shimmer-bg){--shimmer-color: oklch(from currentColor l c h / calc(alpha/5) )}}.shimmer-container{container-type:inline-size}.shimmer-container .shimmer{--shimmer-track-width: 100cqw;--shimmer-track-height: max(100cqh, 50cqw, 200px)}@-moz-document url-prefix(){.shimmer{--_duration: var(--shimmer-duration, calc(375000 / var(--_speed)))}}@media(prefers-reduced-motion:reduce){.animate-fade-rise,.animate-scale-fade,.animate-panel-in,.shimmer{animation:none}.shimmer:not(.shimmer-bg){background:none;-webkit-text-fill-color:currentColor}}.suiji-theme{--background: 42 32% 96%;--foreground: 145 12% 20%;--card: 45 30% 99%;--card-foreground: 145 12% 20%;--popover: 45 30% 99%;--popover-foreground: 145 12% 20%;--primary: 151 22% 34%;--primary-foreground: 0 0% 100%;--secondary: 143 17% 90%;--secondary-foreground: 145 12% 20%;--muted: 40 18% 92%;--muted-foreground: 140 6% 43%;--accent: 143 20% 93%;--accent-foreground: 145 12% 20%;--destructive: 0 65% 42%;--destructive-foreground: 0 0% 100%;--border: 45 14% 84%;--input: 45 14% 84%;--ring: 151 22% 34%;color:hsl(var(--foreground));color-scheme:light}.dark .suiji-theme{--background: 150 12% 9%;--foreground: 140 15% 92%;--card: 150 10% 13%;--card-foreground: 140 15% 92%;--popover: 150 10% 13%;--popover-foreground: 140 15% 92%;--primary: 151 32% 64%;--primary-foreground: 150 20% 10%;--secondary: 150 14% 20%;--secondary-foreground: 140 15% 92%;--muted: 150 8% 18%;--muted-foreground: 140 8% 67%;--accent: 150 16% 23%;--accent-foreground: 140 15% 92%;--destructive: 0 75% 72%;--destructive-foreground: 0 35% 12%;--border: 150 8% 28%;--input: 150 8% 28%;--ring: 151 32% 64%;color-scheme:dark}:where(.suiji-theme,.suiji-theme *){border-color:hsl(var(--border))}@keyframes suiji-drawer-enter{0%{transform:translate(100%)}to{transform:translate(0)}}@media(prefers-reduced-motion:no-preference){.suiji-drawer[open]{animation:suiji-drawer-enter .18s ease-out}}[data-native-overlay-pending]{opacity:0!important;pointer-events:none!important}.file\:border-0::file-selector-button{border-width:0px}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-slate-500::-moz-placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.placeholder\:text-slate-500::placeholder{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.backdrop\:bg-black\/30::backdrop{background-color:#0000004d}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:inset-x-0:before{content:var(--tw-content);left:0;right:0}.before\:inset-y-0:before{content:var(--tw-content);top:0;bottom:0}.before\:bottom-0:before{content:var(--tw-content);bottom:0}.before\:left-1\/2:before{content:var(--tw-content);left:50%}.before\:top-1\/2:before{content:var(--tw-content);top:50%}.before\:h-0\.5:before{content:var(--tw-content);height:.125rem}.before\:h-px:before{content:var(--tw-content);height:1px}.before\:w-0\.5:before{content:var(--tw-content);width:.125rem}.before\:w-px:before{content:var(--tw-content);width:1px}.before\:-translate-x-1\/2:before{content:var(--tw-content);--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))}.before\:-translate-y-1\/2:before{content:var(--tw-content);--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))}.before\:bg-sky-400:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}.before\:bg-sky-500:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.before\:bg-transparent:before{content:var(--tw-content);background-color:transparent}.before\:transition-colors:before{content:var(--tw-content);transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.first\:border-0:first-child{border-width:0px}.last\:border-0:last-child{border-width:0px}.last\:border-b-0:last-child{border-bottom-width:0px}.last\:pb-0:last-child{padding-bottom:0}.focus-within\:border-cyan-400\/45:focus-within{border-color:#22d3ee73}.focus-within\:border-slate-400:focus-within{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.focus-within\:shadow-\[0_18px_50px_rgba\(2\,6\,23\,0\.52\)\,0_0_0_1px_rgba\(34\,211\,238\,0\.12\)\]:focus-within{--tw-shadow: 0 18px 50px rgba(2,6,23,.52),0 0 0 1px rgba(34,211,238,.12);--tw-shadow-colored: 0 18px 50px var(--tw-shadow-color), 0 0 0 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)}.hover\:-translate-y-0\.5:hover{--tw-translate-y: -.125rem;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-border:hover{border-color:hsl(var(--border))}.hover\:border-cyan-300\/60:hover{border-color:#67e8f999}.hover\:border-cyan-400\/40:hover{border-color:#22d3ee66}.hover\:border-cyan-400\/45:hover{border-color:#22d3ee73}.hover\:border-slate-500:hover{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.hover\:border-slate-600:hover{--tw-border-opacity: 1;border-color:rgb(71 85 105 / var(--tw-border-opacity, 1))}.hover\:border-slate-700:hover{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-amber-500:hover{--tw-bg-opacity: 1;background-color:rgb(245 158 11 / var(--tw-bg-opacity, 1))}.hover\:bg-amber-950\/30:hover{background-color:#451a034d}.hover\:bg-black\/5:hover{background-color:#0000000d}.hover\:bg-cyan-400\/10:hover{background-color:#22d3ee1a}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-emerald-500\/20:hover{background-color:#10b98133}.hover\:bg-emerald-950\/30:hover{background-color:#022c224d}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/30:hover{background-color:hsl(var(--muted) / .3)}.hover\:bg-muted\/35:hover{background-color:hsl(var(--muted) / .35)}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-muted\/60:hover{background-color:hsl(var(--muted) / .6)}.hover\:bg-muted\/70:hover{background-color:hsl(var(--muted) / .7)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-red-500\/15:hover{background-color:#ef444426}.hover\:bg-rose-500:hover{--tw-bg-opacity: 1;background-color:rgb(244 63 94 / var(--tw-bg-opacity, 1))}.hover\:bg-rose-500\/90:hover{background-color:#f43f5ee6}.hover\:bg-rose-950\/50:hover{background-color:#4c051980}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-sky-500:hover{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity, 1))}.hover\:bg-sky-500\/10:hover{background-color:#0ea5e91a}.hover\:bg-sky-500\/20:hover{background-color:#0ea5e933}.hover\:bg-sky-600:hover{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-600:hover{--tw-bg-opacity: 1;background-color:rgb(71 85 105 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700:hover{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-700\/70:hover{background-color:#334155b3}.hover\:bg-slate-800:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-800\/40:hover{background-color:#1e293b66}.hover\:bg-slate-800\/50:hover{background-color:#1e293b80}.hover\:bg-slate-800\/80:hover{background-color:#1e293bcc}.hover\:bg-slate-900:hover{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.hover\:bg-slate-900\/45:hover{background-color:#0f172a73}.hover\:bg-slate-900\/70:hover{background-color:#0f172ab3}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-amber-100:hover{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.hover\:text-cyan-100:hover{--tw-text-opacity: 1;color:rgb(207 250 254 / var(--tw-text-opacity, 1))}.hover\:text-cyan-50:hover{--tw-text-opacity: 1;color:rgb(236 254 255 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-indigo-200:hover{--tw-text-opacity: 1;color:rgb(199 210 254 / var(--tw-text-opacity, 1))}.hover\:text-primary:hover{color:hsl(var(--primary))}.hover\:text-red-300:hover{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.hover\:text-red-600:hover{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity, 1))}.hover\:text-rose-100:hover{--tw-text-opacity: 1;color:rgb(255 228 230 / var(--tw-text-opacity, 1))}.hover\:text-rose-200:hover{--tw-text-opacity: 1;color:rgb(254 205 211 / var(--tw-text-opacity, 1))}.hover\:text-rose-300:hover{--tw-text-opacity: 1;color:rgb(253 164 175 / var(--tw-text-opacity, 1))}.hover\:text-rose-400:hover{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.hover\:text-sky-100:hover{--tw-text-opacity: 1;color:rgb(224 242 254 / var(--tw-text-opacity, 1))}.hover\:text-sky-200:hover{--tw-text-opacity: 1;color:rgb(186 230 253 / var(--tw-text-opacity, 1))}.hover\:text-sky-300:hover{--tw-text-opacity: 1;color:rgb(125 211 252 / var(--tw-text-opacity, 1))}.hover\:text-slate-100:hover{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.hover\:text-slate-200:hover{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.hover\:text-slate-300:hover{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_22px_50px_-24px_hsl\(var\(--primary\)\/0\.82\)\]:hover{--tw-shadow: 0 22px 50px -24px hsl(var(--primary)/.82);--tw-shadow-colored: 0 22px 50px -24px 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\:shadow-\[0_22px_50px_-24px_rgba\(244\,63\,94\,0\.82\)\]:hover{--tw-shadow: 0 22px 50px -24px rgba(244,63,94,.82);--tw-shadow-colored: 0 22px 50px -24px 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\:before\:bg-sky-400\/60:hover:before{content:var(--tw-content);background-color:#38bdf899}.focus\:border-primary:focus{border-color:hsl(var(--primary))}.focus\:border-primary\/50:focus{border-color:hsl(var(--primary) / .5)}.focus\:border-sky-400:focus{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity, 1))}.focus\:border-sky-500:focus{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity, 1))}.focus\:border-sky-600:focus{--tw-border-opacity: 1;border-color:rgb(2 132 199 / var(--tw-border-opacity, 1))}.focus\:border-slate-400:focus{--tw-border-opacity: 1;border-color:rgb(148 163 184 / var(--tw-border-opacity, 1))}.focus\:border-slate-500:focus{--tw-border-opacity: 1;border-color:rgb(100 116 139 / var(--tw-border-opacity, 1))}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:bg-muted:focus{background-color:hsl(var(--muted))}.focus\:bg-transparent:focus{background-color:transparent}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-amber-300:focus{--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.focus\:text-muted-foreground:focus{color:hsl(var(--muted-foreground))}.focus\:text-rose-400:focus{--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2: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(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)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-slate-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(100 116 139 / var(--tw-ring-opacity, 1))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:bg-slate-700:focus-visible{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.focus-visible\:bg-slate-900:focus-visible{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.focus-visible\:text-slate-100:focus-visible{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity, 1))}.focus-visible\:text-slate-200:focus-visible{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1))}.focus-visible\:text-slate-300:focus-visible{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline:focus-visible{outline-style:solid}.focus-visible\:outline-2:focus-visible{outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-cyan-300:focus-visible{outline-color:#67e8f9}.focus-visible\:outline-emerald-400:focus-visible{outline-color:#34d399}.focus-visible\:outline-ring:focus-visible{outline-color:hsl(var(--ring))}.focus-visible\:outline-sky-400:focus-visible{outline-color:#38bdf8}.focus-visible\:outline-slate-300:focus-visible{outline-color:#cbd5e1}.focus-visible\:ring-2: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(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)}.focus-visible\:ring-inset:focus-visible{--tw-ring-inset: inset}.focus-visible\:ring-primary\/30:focus-visible{--tw-ring-color: hsl(var(--primary) / .3)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.focus-visible\:ring-sky-400:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(56 189 248 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-slate-500:focus-visible{--tw-ring-opacity: 1;--tw-ring-color: rgb(100 116 139 / var(--tw-ring-opacity, 1))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width: 2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color: hsl(var(--background))}.focus-visible\:before\:bg-sky-400\/60:focus-visible:before{content:var(--tw-content);background-color:#38bdf899}.active\:scale-\[0\.985\]:active{--tw-scale-x: .985;--tw-scale-y: .985;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))}.active\:bg-cyan-400\/15:active{background-color:#22d3ee26}.active\:bg-cyan-400\/35:active{background-color:#22d3ee59}.active\:bg-slate-700:active{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity, 1))}.active\:bg-slate-800:active{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-slate-700:disabled{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.disabled\:border-slate-800:disabled{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.disabled\:bg-slate-800\/70:disabled{background-color:#1e293bb3}.disabled\:bg-slate-900\/50:disabled{background-color:#0f172a80}.disabled\:text-muted-foreground:disabled{color:hsl(var(--muted-foreground))}.disabled\:text-slate-500:disabled{--tw-text-opacity: 1;color:rgb(100 116 139 / var(--tw-text-opacity, 1))}.disabled\:text-slate-600:disabled{--tw-text-opacity: 1;color:rgb(71 85 105 / var(--tw-text-opacity, 1))}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.group:focus-within .group-focus-within\:opacity-100{opacity:1}.group:hover .group-hover\:opacity-100{opacity:1}.group:focus-visible .group-focus-visible\:opacity-100{opacity:1}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.aria-pressed\:bg-accent[aria-pressed=true]{background-color:hsl(var(--accent))}.aria-selected\:bg-slate-800\/80[aria-selected=true]{background-color:#1e293bcc}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y: .25rem;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))}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x: -.25rem;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))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x: .25rem;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))}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y: -.25rem;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))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-muted[data-state=open]{background-color:hsl(var(--muted))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:hsl(var(--accent-foreground))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[resizing\=true\]\:before\:w-0\.5[data-resizing=true]:before{content:var(--tw-content);width:.125rem}.data-\[resizing\=true\]\:before\:bg-sky-400[data-resizing=true]:before{content:var(--tw-content);--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity, 1))}@media(prefers-reduced-motion:no-preference){@keyframes pulse{50%{opacity:.5}}.motion-safe\:animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}}.dark\:bg-blue-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(23 37 84 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(2 44 34 / var(--tw-bg-opacity, 1))}.dark\:bg-emerald-950\/20:is(.dark *){background-color:#022c2233}.dark\:bg-orange-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(67 20 7 / var(--tw-bg-opacity, 1))}.dark\:bg-pink-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(80 7 36 / var(--tw-bg-opacity, 1))}.dark\:bg-purple-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(59 7 100 / var(--tw-bg-opacity, 1))}.dark\:bg-teal-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(4 47 46 / var(--tw-bg-opacity, 1))}.dark\:text-amber-200:is(.dark *){--tw-text-opacity: 1;color:rgb(253 230 138 / var(--tw-text-opacity, 1))}.dark\:text-amber-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 211 77 / var(--tw-text-opacity, 1))}.dark\:text-blue-200:is(.dark *){--tw-text-opacity: 1;color:rgb(191 219 254 / var(--tw-text-opacity, 1))}.dark\:text-emerald-200:is(.dark *){--tw-text-opacity: 1;color:rgb(167 243 208 / var(--tw-text-opacity, 1))}.dark\:text-emerald-300:is(.dark *){--tw-text-opacity: 1;color:rgb(110 231 183 / var(--tw-text-opacity, 1))}.dark\:text-emerald-400:is(.dark *){--tw-text-opacity: 1;color:rgb(52 211 153 / var(--tw-text-opacity, 1))}.dark\:text-orange-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 215 170 / var(--tw-text-opacity, 1))}.dark\:text-pink-200:is(.dark *){--tw-text-opacity: 1;color:rgb(251 207 232 / var(--tw-text-opacity, 1))}.dark\:text-purple-200:is(.dark *){--tw-text-opacity: 1;color:rgb(233 213 255 / var(--tw-text-opacity, 1))}.dark\:text-red-200:is(.dark *){--tw-text-opacity: 1;color:rgb(254 202 202 / var(--tw-text-opacity, 1))}.dark\:text-red-300:is(.dark *){--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.dark\:text-rose-400:is(.dark *){--tw-text-opacity: 1;color:rgb(251 113 133 / var(--tw-text-opacity, 1))}.dark\:text-teal-200:is(.dark *){--tw-text-opacity: 1;color:rgb(153 246 228 / var(--tw-text-opacity, 1))}@media(max-width:1379px){.max-\[1379px\]\:fixed{position:fixed}.max-\[1379px\]\:inset-y-0{top:0;bottom:0}.max-\[1379px\]\:right-0{right:0}.max-\[1379px\]\:z-50{z-index:50}.max-\[1379px\]\:w-\[min\(92vw\,420px\)\]{width:min(92vw,420px)}.max-\[1379px\]\:shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}}@media not all and (min-width:1024px){.max-lg\:min-w-0{min-width:0px}.max-lg\:flex-1{flex:1 1 0%}}@media not all and (min-width:768px){.max-md\:mt-0{margin-top:0}.max-md\:block{display:block}.max-md\:flex{display:flex}.max-md\:contents{display:contents}.max-md\:hidden{display:none}.max-md\:w-28{width:7rem}.max-md\:max-w-40{max-width:10rem}.max-md\:shrink-0{flex-shrink:0}.max-md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.max-md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.max-md\:grid-rows-\[auto_minmax\(0\,1fr\)\]{grid-template-rows:auto minmax(0,1fr)}.max-md\:gap-2{gap:.5rem}.max-md\:overflow-hidden{overflow:hidden}.max-md\:overflow-x-auto{overflow-x:auto}.max-md\:border-b{border-bottom-width:1px}.max-md\:border-r-0{border-right-width:0px}.max-md\:px-3{padding-left:.75rem;padding-right:.75rem}.max-md\:py-2{padding-top:.5rem;padding-bottom:.5rem}.max-md\:\[scrollbar-width\:none\]{scrollbar-width:none}}@media not all and (min-width:640px){.max-sm\:hidden{display:none}.max-sm\:w-full{width:100%}.max-sm\:max-w-36{max-width:9rem}.max-sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.max-sm\:flex-col{flex-direction:column}}@media(min-width:640px){.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:hidden{display:none}.sm\:w-\[560px\]{width:560px}.sm\:max-w-2xl,.sm\:max-w-\[42rem\]{max-width:42rem}.sm\:max-w-\[460px\]{max-width:460px}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-xl{max-width:36rem}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-7{padding:1.75rem}.sm\:p-9{padding:2.25rem}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}}@media(min-width:768px){.md\:h-8{height:2rem}.md\:w-8{width:2rem}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:bg-primary\/10{background-color:hsl(var(--primary) / .1)}.md\:p-9{padding:2.25rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:1024px){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,0\.9fr\)_minmax\(0\,1\.1fr\)\]{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr)}.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media(min-width:1280px){.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-\[minmax\(0\,1\.4fr\)_minmax\(280px\,0\.6fr\)\]{grid-template-columns:minmax(0,1.4fr) minmax(280px,.6fr)}.xl\:grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(280px\,0\.7fr\)\]{grid-template-columns:minmax(0,1.5fr) minmax(280px,.7fr)}.xl\:grid-cols-\[minmax\(280px\,0\.7fr\)_minmax\(0\,1\.3fr\)\]{grid-template-columns:minmax(280px,.7fr) minmax(0,1.3fr)}}@media(min-width:1380px){.min-\[1380px\]\:block{display:block}.min-\[1380px\]\:hidden{display:none}.min-\[1380px\]\:grid-cols-\[300px_minmax\(0\,1fr\)_380px\]{grid-template-columns:300px minmax(0,1fr) 380px}}.\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}@media not all and (min-width:768px){.max-md\:\[\&\:\:-webkit-scrollbar\]\:hidden::-webkit-scrollbar{display:none}}.\[\&\>div\]\:shrink-0>div{flex-shrink:0}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&_\.rw-image-preview__button\]\:min-h-0 .rw-image-preview button{min-height:0px}.\[\&_\.rw-image-preview__open\]\:hidden .rw-image-preview open{display:none}.\[\&_\.side-chat-code-block\>button\]\:block .side-chat-code-block>button{display:block}.\[\&_\.side-chat-code-block\>button\]\:w-full .side-chat-code-block>button{width:100%}.\[\&_\.side-chat-code-block\>button\]\:bg-muted .side-chat-code-block>button{background-color:hsl(var(--muted))}.\[\&_\.side-chat-code-block\>button\]\:px-3 .side-chat-code-block>button{padding-left:.75rem;padding-right:.75rem}.\[\&_\.side-chat-code-block\>button\]\:py-1 .side-chat-code-block>button{padding-top:.25rem;padding-bottom:.25rem}.\[\&_\.side-chat-code-block\>button\]\:text-right .side-chat-code-block>button{text-align:right}.\[\&_\.side-chat-code-block\>button\]\:text-xs .side-chat-code-block>button{font-size:.75rem;line-height:1rem}.\[\&_\.side-chat-code-block\]\:my-3 .side-chat-code-block{margin-top:.75rem;margin-bottom:.75rem}.\[\&_\.side-chat-code-block\]\:min-w-0 .side-chat-code-block{min-width:0px}.\[\&_\.side-chat-code-block\]\:overflow-hidden .side-chat-code-block{overflow:hidden}.\[\&_\.side-chat-code-block\]\:rounded-md .side-chat-code-block{border-radius:.375rem}.\[\&_\.side-chat-code-block\]\:border .side-chat-code-block{border-width:1px}.\[\&_\.side-chat-code-block\]\:border-border .side-chat-code-block{border-color:hsl(var(--border))}.\[\&_a\]\:break-all a{word-break:break-all}.\[\&_a\]\:text-cyan-300 a{--tw-text-opacity: 1;color:rgb(103 232 249 / var(--tw-text-opacity, 1))}.\[\&_a\]\:text-primary a{color:hsl(var(--primary))}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_blockquote\]\:my-3 blockquote{margin-top:.75rem;margin-bottom:.75rem}.\[\&_blockquote\]\:border-l blockquote{border-left-width:1px}.\[\&_blockquote\]\:border-l-2 blockquote{border-left-width:2px}.\[\&_blockquote\]\:border-border blockquote{border-color:hsl(var(--border))}.\[\&_blockquote\]\:border-slate-700 blockquote{--tw-border-opacity: 1;border-color:rgb(51 65 85 / var(--tw-border-opacity, 1))}.\[\&_blockquote\]\:pl-3 blockquote{padding-left:.75rem}.\[\&_blockquote\]\:text-muted-foreground blockquote{color:hsl(var(--muted-foreground))}.\[\&_code\]\:rounded code{border-radius:.25rem}.\[\&_code\]\:bg-muted code{background-color:hsl(var(--muted))}.\[\&_code\]\:bg-slate-900 code{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.\[\&_code\]\:px-1 code{padding-left:.25rem;padding-right:.25rem}.\[\&_h1\]\:mb-3 h1{margin-bottom:.75rem}.\[\&_h1\]\:text-2xl h1{font-size:1.5rem;line-height:2rem}.\[\&_h1\]\:text-xl h1{font-size:1.25rem;line-height:1.75rem}.\[\&_h1\]\:font-semibold h1{font-weight:600}.\[\&_h2\]\:my-3 h2{margin-top:.75rem;margin-bottom:.75rem}.\[\&_h2\]\:mb-2 h2{margin-bottom:.5rem}.\[\&_h2\]\:mt-6 h2{margin-top:1.5rem}.\[\&_h2\]\:text-lg h2{font-size:1.125rem;line-height:1.75rem}.\[\&_h2\]\:text-xl h2{font-size:1.25rem;line-height:1.75rem}.\[\&_h2\]\:font-semibold h2{font-weight:600}.\[\&_h3\]\:my-2 h3{margin-top:.5rem;margin-bottom:.5rem}.\[\&_h3\]\:mb-2 h3{margin-bottom:.5rem}.\[\&_h3\]\:mt-5 h3{margin-top:1.25rem}.\[\&_h3\]\:text-lg h3{font-size:1.125rem;line-height:1.75rem}.\[\&_h3\]\:font-semibold h3{font-weight:600}.\[\&_hr\]\:my-4 hr{margin-top:1rem;margin-bottom:1rem}.\[\&_hr\]\:border-border hr{border-color:hsl(var(--border))}.\[\&_hr\]\:border-slate-800 hr{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_img\]\:my-4 img{margin-top:1rem;margin-bottom:1rem}.\[\&_img\]\:max-w-full img{max-width:100%}.\[\&_img\]\:cursor-zoom-in img{cursor:zoom-in}.\[\&_img\]\:rounded-lg img{border-radius:.5rem}.\[\&_img\]\:border img{border-width:1px}.\[\&_img\]\:border-slate-800 img{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_li\]\:my-1 li{margin-top:.25rem;margin-bottom:.25rem}.\[\&_li\]\:ml-4 li{margin-left:1rem}.\[\&_ol\]\:my-2 ol{margin-top:.5rem;margin-bottom:.5rem}.\[\&_ol\]\:ml-5 ol{margin-left:1.25rem}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:pl-5 ol{padding-left:1.25rem}.\[\&_p\+p\]\:mt-2 p+p{margin-top:.5rem}.\[\&_p\+p\]\:mt-3 p+p{margin-top:.75rem}.\[\&_p\]\:my-3 p{margin-top:.75rem;margin-bottom:.75rem}.\[\&_pre\]\:my-4 pre{margin-top:1rem;margin-bottom:1rem}.\[\&_pre\]\:overflow-auto pre{overflow:auto}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_pre\]\:rounded-lg pre{border-radius:.5rem}.\[\&_pre\]\:bg-slate-900 pre{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.\[\&_pre\]\:p-3 pre{padding:.75rem}.\[\&_pre_code\]\:bg-transparent pre code{background-color:transparent}.\[\&_pre_code\]\:p-0 pre code{padding:0}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_table\]\:my-3 table{margin-top:.75rem;margin-bottom:.75rem}.\[\&_table\]\:my-4 table{margin-top:1rem;margin-bottom:1rem}.\[\&_table\]\:block table{display:block}.\[\&_table\]\:w-full table{width:100%}.\[\&_table\]\:max-w-full table{max-width:100%}.\[\&_table\]\:border-collapse table{border-collapse:collapse}.\[\&_table\]\:overflow-x-auto table{overflow-x:auto}.\[\&_td\]\:border td{border-width:1px}.\[\&_td\]\:border-border td{border-color:hsl(var(--border))}.\[\&_td\]\:border-slate-800 td{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_td\]\:px-2 td{padding-left:.5rem;padding-right:.5rem}.\[\&_td\]\:px-3 td{padding-left:.75rem;padding-right:.75rem}.\[\&_td\]\:py-1 td{padding-top:.25rem;padding-bottom:.25rem}.\[\&_th\]\:border th{border-width:1px}.\[\&_th\]\:border-border th{border-color:hsl(var(--border))}.\[\&_th\]\:border-slate-800 th{--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.\[\&_th\]\:px-2 th{padding-left:.5rem;padding-right:.5rem}.\[\&_th\]\:px-3 th{padding-left:.75rem;padding-right:.75rem}.\[\&_th\]\:py-1 th{padding-top:.25rem;padding-bottom:.25rem}.\[\&_ul\]\:my-2 ul{margin-top:.5rem;margin-bottom:.5rem}.\[\&_ul\]\:ml-5 ul{margin-left:1.25rem}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:pl-5 ul{padding-left:1.25rem}