orcheo-studio 0.22.2 → 0.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/.bumpversion.cfg +1 -1
  2. package/dist/assets/{arc-De9dLqyl.js → arc-CqnxfCHp.js} +1 -1
  3. package/dist/assets/{architectureDiagram-VXUJARFQ-hEslfmYm.js → architectureDiagram-VXUJARFQ-UGPIhA1j.js} +1 -1
  4. package/dist/assets/{blockDiagram-VD42YOAC-CyWSMWJa.js → blockDiagram-VD42YOAC-Cn6wka40.js} +1 -1
  5. package/dist/assets/{c4Diagram-YG6GDRKO-CxoTVJ47.js → c4Diagram-YG6GDRKO-BvPRNdur.js} +1 -1
  6. package/dist/assets/channel-FjxqoZWk.js +1 -0
  7. package/dist/assets/{chunk-4BX2VUAB-twftUw9o.js → chunk-4BX2VUAB-F_o1AmTw.js} +1 -1
  8. package/dist/assets/{chunk-55IACEB6-DQZDNQUo.js → chunk-55IACEB6-Cl075es2.js} +1 -1
  9. package/dist/assets/{chunk-B4BG7PRW-BYGOoNB5.js → chunk-B4BG7PRW-DcErQhy9.js} +1 -1
  10. package/dist/assets/{chunk-DI55MBZ5-qyPhcZF3.js → chunk-DI55MBZ5-CFxCndOp.js} +1 -1
  11. package/dist/assets/{chunk-FMBD7UC4-BgUDHGEG.js → chunk-FMBD7UC4-XOcF0fgy.js} +1 -1
  12. package/dist/assets/{chunk-QN33PNHL-DHlMh8NC.js → chunk-QN33PNHL-CjJH_Bvj.js} +1 -1
  13. package/dist/assets/{chunk-QZHKN3VN-Bfc8IV0O.js → chunk-QZHKN3VN-nLb-Go8u.js} +1 -1
  14. package/dist/assets/{chunk-TZMSLE5B-BqwdftTm.js → chunk-TZMSLE5B-L07ovmT0.js} +1 -1
  15. package/dist/assets/classDiagram-2ON5EDUG-8JYNY9Ic.js +1 -0
  16. package/dist/assets/classDiagram-v2-WZHVMYZB-8JYNY9Ic.js +1 -0
  17. package/dist/assets/clone-NPVQC0Uc.js +1 -0
  18. package/dist/assets/{cose-bilkent-S5V4N54A-g5agH7fS.js → cose-bilkent-S5V4N54A-B6IcYcMk.js} +1 -1
  19. package/dist/assets/{dagre-6UL2VRFP-ajLMaXPP.js → dagre-6UL2VRFP-CN7ADhef.js} +1 -1
  20. package/dist/assets/{diagram-PSM6KHXK-BndVcBhB.js → diagram-PSM6KHXK-3chqLyzk.js} +1 -1
  21. package/dist/assets/{diagram-QEK2KX5R-BFiIYeu7.js → diagram-QEK2KX5R-MrbKZWaG.js} +1 -1
  22. package/dist/assets/{diagram-S2PKOQOG-DXy-A9pn.js → diagram-S2PKOQOG-Dr7BijIx.js} +1 -1
  23. package/dist/assets/{erDiagram-Q2GNP2WA-D_Bac_58.js → erDiagram-Q2GNP2WA-Ck-v9a6N.js} +1 -1
  24. package/dist/assets/{flowDiagram-NV44I4VS-DhEi8qtz.js → flowDiagram-NV44I4VS-D662eMD1.js} +1 -1
  25. package/dist/assets/{ganttDiagram-JELNMOA3-BtpUvOuc.js → ganttDiagram-JELNMOA3-c2mXK47M.js} +1 -1
  26. package/dist/assets/{gitGraphDiagram-V2S2FVAM-MBES60cx.js → gitGraphDiagram-V2S2FVAM-DUMhfhsS.js} +1 -1
  27. package/dist/assets/{graph-BcwvIN-m.js → graph-DkWlmVun.js} +1 -1
  28. package/dist/assets/index-BVY_PYJU.css +1 -0
  29. package/dist/assets/index-kH6EkBsZ.js +790 -0
  30. package/dist/assets/{infoDiagram-HS3SLOUP-vaIFYyC9.js → infoDiagram-HS3SLOUP-OTL7qvkP.js} +1 -1
  31. package/dist/assets/{isUndefined-DVO6xakl.js → isUndefined-BmZvH1PX.js} +1 -1
  32. package/dist/assets/{journeyDiagram-XKPGCS4Q-D-_q99If.js → journeyDiagram-XKPGCS4Q-BYzqE5D8.js} +1 -1
  33. package/dist/assets/{kanban-definition-3W4ZIXB7-i_AZcs_J.js → kanban-definition-3W4ZIXB7-NtzQ4y9p.js} +1 -1
  34. package/dist/assets/{layout-CPJ9nR_z.js → layout-CwhyLMkP.js} +1 -1
  35. package/dist/assets/{linear-KBGpPBiH.js → linear-Cirf2V1x.js} +1 -1
  36. package/dist/assets/{min-By5f7YdD.js → min-C81vLJYh.js} +1 -1
  37. package/dist/assets/{mindmap-definition-VGOIOE7T-DRjtRxFS.js → mindmap-definition-VGOIOE7T-TDnLQIKZ.js} +1 -1
  38. package/dist/assets/{pieDiagram-ADFJNKIX-BkkSglWM.js → pieDiagram-ADFJNKIX-d0-JhjNZ.js} +1 -1
  39. package/dist/assets/{quadrantDiagram-AYHSOK5B-DY-Ng2qt.js → quadrantDiagram-AYHSOK5B-wCoihp8a.js} +1 -1
  40. package/dist/assets/{requirementDiagram-UZGBJVZJ-B5w0etXG.js → requirementDiagram-UZGBJVZJ-BqiCIjcI.js} +1 -1
  41. package/dist/assets/{sankeyDiagram-TZEHDZUN-BWntUp8b.js → sankeyDiagram-TZEHDZUN-BPH0Pd1D.js} +1 -1
  42. package/dist/assets/{sequenceDiagram-WL72ISMW-Cl77fd7y.js → sequenceDiagram-WL72ISMW-B8FfJraH.js} +1 -1
  43. package/dist/assets/{stateDiagram-FKZM4ZOC-B8_DoPW6.js → stateDiagram-FKZM4ZOC-ZQR3Q9_8.js} +1 -1
  44. package/dist/assets/stateDiagram-v2-4FDKWEC3-uDYn1wPF.js +1 -0
  45. package/dist/assets/{timeline-definition-IT6M3QCI-udvNLTe_.js → timeline-definition-IT6M3QCI-D-arYxX5.js} +1 -1
  46. package/dist/assets/{treemap-GDKQZRPO-BSvoMl74.js → treemap-GDKQZRPO-Dw5BHp_B.js} +1 -1
  47. package/dist/assets/{xychartDiagram-PRI3JC2R-CTdy-FCX.js → xychartDiagram-PRI3JC2R-Dt1zH6V2.js} +1 -1
  48. package/dist/index.html +2 -2
  49. package/package.json +1 -1
  50. package/src/App.tsx +7 -2
  51. package/src/features/account/pages/invitation-accept.tsx +92 -0
  52. package/src/features/account/pages/workspace-members.tsx +153 -42
  53. package/src/features/auth/components/require-auth.tsx +13 -18
  54. package/src/features/auth/lib/auth-api.ts +196 -0
  55. package/src/features/auth/lib/auth-session.ts +0 -1
  56. package/src/features/auth/pages/login.tsx +169 -16
  57. package/src/features/auth/pages/verify.tsx +89 -0
  58. package/src/features/chatkit/components/public-chat-widget.tsx +89 -8
  59. package/src/features/chatkit/lib/chatkit-client.ts +66 -0
  60. package/src/features/chatkit/pages/public-chat.tsx +17 -30
  61. package/src/features/shared/components/top-navigation/account-menu.tsx +20 -7
  62. package/src/features/shared/components/top-navigation/studio-brand.tsx +14 -3
  63. package/src/features/workflow/components/dialogs/publish-workflow-dialog.tsx +121 -0
  64. package/src/features/workflow/data/templates/candidate-badges.ts +28 -0
  65. package/src/features/workflow/data/workflow-types.ts +6 -0
  66. package/src/features/workflow/lib/workflow-storage-helpers.ts +5 -3
  67. package/src/features/workflow/lib/workflow-storage-versioning.ts +4 -0
  68. package/src/features/workflow/lib/workflow-storage.types.ts +1 -0
  69. package/src/features/workflow/pages/workflow/components/workflow-tab-content.tsx +122 -37
  70. package/src/features/workflow/pages/workflow/hooks/controller/build-layout-props.ts +2 -0
  71. package/src/features/workflow/pages/workflow/hooks/controller/use-workflow-lifecycle.ts +1 -0
  72. package/src/features/workflow/pages/workflow/hooks/use-workflow-loader.ts +5 -0
  73. package/src/features/workflow/pages/workflow/hooks/use-workflow-metadata-state.ts +3 -0
  74. package/src/features/workflow/pages/workflow/hooks/use-workflow-saver.ts +11 -2
  75. package/src/features/workflow/pages/workflow-gallery/workflow-gallery-tabs.tsx +47 -4
  76. package/src/lib/api.ts +78 -1
  77. package/src/vite-env.d.ts +1 -0
  78. package/dist/assets/channel-CzCzGn0f.js +0 -1
  79. package/dist/assets/classDiagram-2ON5EDUG-ekNI5d_4.js +0 -1
  80. package/dist/assets/classDiagram-v2-WZHVMYZB-ekNI5d_4.js +0 -1
  81. package/dist/assets/clone-DowBu1Kh.js +0 -1
  82. package/dist/assets/index-DLYzf0K-.js +0 -775
  83. package/dist/assets/index-DebsXgfj.css +0 -1
  84. package/dist/assets/stateDiagram-v2-4FDKWEC3-DHL7p-md.js +0 -1
  85. package/src/features/MODULES.md +0 -199
  86. package/src/features/auth/components/auto-login.tsx +0 -51
  87. package/src/features/auth/lib/oidc-client.ts +0 -565
  88. package/src/features/auth/pages/oauth-callback.tsx +0 -63
@@ -1 +0,0 @@
1
- :root{--agentprism-background: 1 0 0;--agentprism-foreground: 21% .034 264.665;--agentprism-primary: 21% .034 264.665;--agentprism-primary-foreground: 98.5% .002 247.839;--agentprism-secondary: 96.7% .003 264.542;--agentprism-secondary-foreground: 55.1% .027 264.364;--agentprism-muted: 98.5% .002 247.839;--agentprism-muted-foreground: 44.6% .03 256.802;--agentprism-accent: 96.7% .003 264.542;--agentprism-accent-foreground: 96.7% .003 264.542;--agentprism-brand: 60.6% .25 292.717;--agentprism-brand-foreground: 1 0 0;--agentprism-brand-secondary: 70.5% .213 47.604;--agentprism-brand-secondary-foreground: 1 0 0;--agentprism-border: 92.8% .006 264.531;--agentprism-border-subtle: 96.7% .003 264.542;--agentprism-border-strong: 87.2% .01 258.338;--agentprism-border-inverse: 21% .034 264.665;--agentprism-success: 69.6% .17 162.48;--agentprism-success-muted: 97.9% .021 166.113;--agentprism-success-muted-foreground: 50.8% .118 165.612;--agentprism-error: 63.7% .237 25.331;--agentprism-error-muted: 97.1% .013 17.38;--agentprism-error-muted-foreground: 57.7% .245 27.325;--agentprism-warning: 79.5% .184 86.047;--agentprism-warning-muted: 98.7% .026 102.212;--agentprism-warning-muted-foreground: 55.4% .135 66.442;--agentprism-pending: 60.6% .25 292.717;--agentprism-pending-muted: 94.3% .029 294.588;--agentprism-pending-muted-foreground: 54.1% .281 293.009;--agentprism-code-string: 57.7% .245 27.325;--agentprism-code-number: 57.7% .245 27.325;--agentprism-code-key: 54.6% .245 262.881;--agentprism-code-base: 55.1% .027 264.364;--agentprism-badge-default: 96.7% .003 264.542;--agentprism-badge-default-foreground: 44.6% .03 256.802;--agentprism-avatar-llm: 62.7% .265 303.9;--agentprism-badge-llm: 97.7% .014 308.299;--agentprism-badge-llm-foreground: 62.7% .265 303.9;--agentprism-timeline-llm: 71.4% .203 305.504;--agentprism-avatar-agent: 58.5% .233 277.117;--agentprism-badge-agent: 96.2% .018 272.314;--agentprism-badge-agent-foreground: 58.5% .233 277.117;--agentprism-timeline-agent: 67.3% .182 276.935;--agentprism-avatar-tool: 70.5% .213 47.604;--agentprism-badge-tool: 98% .016 73.684;--agentprism-badge-tool-foreground: 70.5% .213 47.604;--agentprism-timeline-tool: 75% .183 55.934;--agentprism-avatar-chain: 70.4% .14 182.503;--agentprism-badge-chain: 98.4% .014 180.72;--agentprism-badge-chain-foreground: 70.4% .14 182.503;--agentprism-timeline-chain: 77.7% .152 181.912;--agentprism-avatar-retrieval: 71.5% .143 215.221;--agentprism-badge-retrieval: 98.4% .019 200.873;--agentprism-badge-retrieval-foreground: 71.5% .143 215.221;--agentprism-timeline-retrieval: 78.9% .154 211.53;--agentprism-avatar-embedding: 69.6% .17 162.48;--agentprism-badge-embedding: 97.9% .021 166.113;--agentprism-badge-embedding-foreground: 69.6% .17 162.48;--agentprism-timeline-embedding: 76.5% .177 163.223;--agentprism-avatar-guardrail: 63.7% .237 25.331;--agentprism-badge-guardrail: 97.1% .013 17.38;--agentprism-badge-guardrail-foreground: 63.7% .237 25.331;--agentprism-timeline-guardrail: 70.4% .191 22.216;--agentprism-avatar-create-agent: 68.5% .169 237.323;--agentprism-badge-create-agent: 97.7% .013 236.62;--agentprism-badge-create-agent-foreground: 68.5% .169 237.323;--agentprism-timeline-create-agent: 74.6% .16 232.661;--agentprism-avatar-span: 71.5% .143 215.221;--agentprism-badge-span: 98.4% .019 200.873;--agentprism-badge-span-foreground: 71.5% .143 215.221;--agentprism-timeline-span: 78.9% .154 211.53;--agentprism-avatar-event: 69.6% .17 162.48;--agentprism-badge-event: 97.9% .021 166.113;--agentprism-badge-event-foreground: 69.6% .17 162.48;--agentprism-timeline-event: 76.5% .177 163.223;--agentprism-avatar-unknown: 55.1% .027 264.364;--agentprism-badge-unknown: 98.5% .002 247.839;--agentprism-badge-unknown-foreground: 55.1% .027 264.364;--agentprism-timeline-unknown: 70.7% .022 261.325}.dark{--agentprism-background: 4% 0 0;--agentprism-foreground: 96.7% .003 264.542;--agentprism-primary: 96.7% .003 264.542;--agentprism-primary-foreground: 13% .028 261.692;--agentprism-secondary: 27.8% .033 256.848;--agentprism-secondary-foreground: 55.1% .027 264.364;--agentprism-muted: 21% .034 264.665;--agentprism-muted-foreground: 70.7% .022 261.325;--agentprism-accent: 96.7% .003 264.542;--agentprism-accent-foreground: 21% .034 264.665;--agentprism-brand: 60.6% .25 292.717;--agentprism-brand-foreground: 1 0 0;--agentprism-brand-secondary: 70.5% .213 47.604;--agentprism-brand-secondary-foreground: 1 0 0;--agentprism-border: 44.6% .03 256.802;--agentprism-border-subtle: 37.3% .034 259.733;--agentprism-border-strong: 55.1% .027 264.364;--agentprism-border-inverse: 92.8% .006 264.531;--agentprism-success: 72.3% .219 149.579;--agentprism-success-muted: 26.6% .065 152.934;--agentprism-success-muted-foreground: 87.1% .15 154.449;--agentprism-error: 63.7% .237 25.331;--agentprism-error-muted: 25.8% .092 26.042;--agentprism-error-muted-foreground: 80.8% .114 19.571;--agentprism-warning: 79.5% .184 86.047;--agentprism-warning-muted: 28.6% .066 53.813;--agentprism-warning-muted-foreground: 90.5% .182 98.111;--agentprism-pending: 60.6% .25 292.717;--agentprism-pending-muted: 28.3% .141 291.089;--agentprism-pending-muted-foreground: 70.2% .183 293.541;--agentprism-code-string: 70.4% .191 22.216;--agentprism-code-number: 70.4% .191 22.216;--agentprism-code-key: 80.9% .105 251.813;--agentprism-code-base: 70.7% .022 261.325;--agentprism-badge-default: 21% .034 264.665;--agentprism-badge-default-foreground: 70.7% .022 261.325;--agentprism-avatar-llm: 82.7% .119 306.383;--agentprism-badge-llm: 29.1% .149 302.717;--agentprism-badge-llm-foreground: 82.7% .119 306.383;--agentprism-timeline-llm: 71.4% .203 305.504;--agentprism-avatar-agent: 78.5% .115 274.713;--agentprism-badge-agent: 25.7% .09 281.288;--agentprism-badge-agent-foreground: 78.5% .115 274.713;--agentprism-timeline-agent: 67.3% .182 276.935;--agentprism-avatar-tool: 83.7% .128 66.29;--agentprism-badge-tool: 26.6% .079 36.259;--agentprism-badge-tool-foreground: 83.7% .128 66.29;--agentprism-timeline-tool: 75% .183 55.934;--agentprism-avatar-chain: 85.5% .138 181.071;--agentprism-badge-chain: 27.7% .046 192.524;--agentprism-badge-chain-foreground: 85.5% .138 181.071;--agentprism-timeline-chain: 77.7% .152 181.912;--agentprism-avatar-retrieval: 86.5% .127 207.078;--agentprism-badge-retrieval: 30.2% .056 229.695;--agentprism-badge-retrieval-foreground: 86.5% .127 207.078;--agentprism-timeline-retrieval: 78.9% .154 211.53;--agentprism-avatar-embedding: 84.5% .143 164.978;--agentprism-badge-embedding: 26.2% .051 172.552;--agentprism-badge-embedding-foreground: 84.5% .143 164.978;--agentprism-timeline-embedding: 76.5% .177 163.223;--agentprism-avatar-guardrail: 80.8% .114 19.571;--agentprism-badge-guardrail: 25.8% .092 26.042;--agentprism-badge-guardrail-foreground: 80.8% .114 19.571;--agentprism-timeline-guardrail: 70.4% .191 22.216;--agentprism-avatar-create-agent: 82.8% .111 230.318;--agentprism-badge-create-agent: 29.3% .066 243.157;--agentprism-badge-create-agent-foreground: 82.8% .111 230.318;--agentprism-timeline-create-agent: 74.6% .16 232.661;--agentprism-avatar-span: 86.5% .127 207.078;--agentprism-badge-span: 30.2% .056 229.695;--agentprism-badge-span-foreground: 86.5% .127 207.078;--agentprism-timeline-span: 78.9% .154 211.53;--agentprism-avatar-event: 84.5% .143 164.978;--agentprism-badge-event: 26.2% .051 172.552;--agentprism-badge-event-foreground: 84.5% .143 164.978;--agentprism-timeline-event: 76.5% .177 163.223;--agentprism-avatar-unknown: 87.2% .01 258.338;--agentprism-badge-unknown: 13% .028 261.692;--agentprism-badge-unknown-foreground: 87.2% .01 258.338;--agentprism-timeline-unknown: 70.7% .022 261.325}.react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";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}:root{--background: 0 0% 100%;--foreground: 240 10% 3.9%;--card: 0 0% 100%;--card-foreground: 240 10% 3.9%;--popover: 0 0% 100%;--popover-foreground: 240 10% 3.9%;--primary: 240 5.9% 10%;--primary-foreground: 0 0% 98%;--secondary: 240 4.8% 95.9%;--secondary-foreground: 240 5.9% 10%;--muted: 240 4.8% 95.9%;--muted-foreground: 240 3.8% 46.1%;--accent: 240 4.8% 95.9%;--accent-foreground: 240 5.9% 10%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 240 5.9% 90%;--input: 240 5.9% 90%;--ring: 240 5.9% 10%;--radius: .5rem;--chart-1: 12 76% 61%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%}.dark{--background: 240 10% 3.9%;--foreground: 0 0% 98%;--card: 240 10% 3.9%;--card-foreground: 0 0% 98%;--popover: 240 10% 3.9%;--popover-foreground: 0 0% 98%;--primary: 0 0% 98%;--primary-foreground: 240 5.9% 10%;--secondary: 240 3.7% 15.9%;--secondary-foreground: 0 0% 98%;--muted: 240 3.7% 15.9%;--muted-foreground: 240 5% 64.9%;--accent: 240 3.7% 15.9%;--accent-foreground: 0 0% 98%;--destructive: 0 62.8% 30.6%;--destructive-foreground: 0 0% 98%;--border: 240 3.7% 15.9%;--input: 240 3.7% 15.9%;--ring: 240 4.9% 83.9%;--chart-1: 220 70% 50%;--chart-2: 160 60% 45%;--chart-3: 30 80% 55%;--chart-4: 280 65% 60%;--chart-5: 340 75% 55%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.container{width:100%}@media(min-width:640px){.container{max-width:640px}}@media(min-width:768px){.container{max-width:768px}}@media(min-width:1024px){.container{max-width:1024px}}@media(min-width:1280px){.container{max-width:1280px}}@media(min-width:1536px){.container{max-width:1536px}}.dark .react-flow__controls{border-color:#1e293bcc;background-color:#0f172ae6;--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity, 1));--tw-shadow: 0 18px 40px rgba(0,0,0,.65);--tw-shadow-colored: 0 18px 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)}.dark .react-flow__controls-button{border-color:#1e293bb3;--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark .react-flow__controls-button:hover{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark .react-flow__controls-button:focus-visible{--tw-ring-color: rgb(203 213 225 / .4);--tw-ring-offset-color: #0f172a}.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}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.inset-x-0{left:0;right:0}.inset-x-1{left:.25rem;right:.25rem}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.bottom-4{bottom:1rem}.left-0{left:0}.left-1\/2{left:50%}.left-2{left:.5rem}.left-2\.5{left:.625rem}.left-3{left:.75rem}.left-4{left:1rem}.left-\[50\%\]{left:50%}.right-0{right:0}.right-1{right:.25rem}.right-1\.5{right:.375rem}.right-2{right:.5rem}.right-3{right:.75rem}.right-4{right:1rem}.right-6{right:1.5rem}.top-0{top:0}.top-1{top:.25rem}.top-1\.5{top:.375rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-2\.5{top:.625rem}.top-3{top:.75rem}.top-4{top:1rem}.top-\[50\%\]{top:50%}.z-10{z-index:10}.z-50{z-index:50}.z-\[100\]{z-index:100}.col-span-3{grid-column:span 3 / span 3}.m-0{margin:0}.-mx-1{margin-left:-.25rem;margin-right:-.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-1{margin-top:.25rem;margin-bottom:.25rem}.-mb-\[2px\]{margin-bottom:-2px}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-auto{margin-left:auto}.mr-1{margin-right:.25rem}.mr-1\.5{margin-right:.375rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.aspect-\[121\/192\]{aspect-ratio:121/192}.aspect-square{aspect-ratio:1 / 1}.size-0\.5{width:.125rem;height:.125rem}.size-1\.5{width:.375rem;height:.375rem}.size-10{width:2.5rem;height:2.5rem}.size-11{width:2.75rem;height:2.75rem}.size-12{width:3rem;height:3rem}.size-16{width:4rem;height:4rem}.size-2\.5{width:.625rem;height:.625rem}.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}.size-8{width:2rem;height:2rem}.size-9{width:2.25rem;height:2.25rem}.size-full{width:100%;height:100%}.h-0\.5{height:.125rem}.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-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-20{height:5rem}.h-24{height:6rem}.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-\[1px\]{height:1px}.h-\[400px\]{height:400px}.h-\[520px\]{height:520px}.h-\[72vh\]{height:72vh}.h-\[7em\]{height:7em}.h-\[7px\]{height:7px}.h-\[calc\(100vh-9\.5rem\)\]{height:calc(100vh - 9.5rem)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-96{max-height:24rem}.max-h-\[75vh\]{max-height:75vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[calc\(100vh-2rem\)\]{max-height:calc(100vh - 2rem)}.max-h-screen{max-height:100vh}.min-h-0{min-height:0px}.min-h-10{min-height:2.5rem}.min-h-11{min-height:2.75rem}.min-h-12{min-height:3rem}.min-h-16{min-height:4rem}.min-h-4{min-height:1rem}.min-h-40{min-height:10rem}.min-h-5{min-height:1.25rem}.min-h-6{min-height:1.5rem}.min-h-7{min-height:1.75rem}.min-h-8{min-height:2rem}.min-h-9{min-height:2.25rem}.min-h-\[320px\]{min-height:320px}.min-h-\[520px\]{min-height:520px}.min-h-\[60px\]{min-height:60px}.min-h-\[60vh\]{min-height:60vh}.min-h-\[80px\]{min-height:80px}.min-h-screen{min-height:100vh}.w-0\.5{width:.125rem}.w-1\.5{width:.375rem}.w-1\/2{width:50%}.w-10{width:2.5rem}.w-14{width:3.5rem}.w-2{width:.5rem}.w-2\.5{width:.625rem}.w-20{width:5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-3\/4{width:75%}.w-32{width:8rem}.w-36{width:9rem}.w-4{width:1rem}.w-40{width:10rem}.w-44{width:11rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-64{width:16rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[180px\]{width:180px}.w-\[1px\]{width:1px}.w-\[260px\]{width:260px}.w-\[48px\]{width:48px}.w-\[7em\]{width:7em}.w-fit{width:-moz-fit-content;width:fit-content}.w-full{width:100%}.min-w-0{min-width:0px}.min-w-10{min-width:2.5rem}.min-w-20{min-width:5rem}.min-w-8{min-width:2rem}.min-w-9{min-width:2.25rem}.min-w-\[820px\]{min-width:820px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.max-w-32{max-width:8rem}.max-w-3xl{max-width:48rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-6xl{max-width:72rem}.max-w-7xl{max-width:80rem}.max-w-\[300px\]{max-width:300px}.max-w-\[67\.2rem\]{max-width:67.2rem}.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-xl{max-width:36rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.caption-bottom{caption-side:bottom}.-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-px{--tw-translate-x: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-px{--tw-translate-y: -1px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-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-\[-3px\]{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-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))}.rotate-0{--tw-rotate: 0deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@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-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.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{resize:both}.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-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.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-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-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-1{row-gap:.25rem}.gap-y-2{row-gap:.5rem}.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)))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-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-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.self-start{align-self:flex-start}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.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-3xl{border-radius:1.5rem}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:.75rem}.rounded-tl-2xl{border-top-left-radius:1rem}.border{border-width:1px}.border-0{border-width:0px}.border-2{border-width:2px}.border-4{border-width:4px}.border-b{border-bottom-width:1px}.border-b-2{border-bottom-width:2px}.border-l{border-left-width:1px}.border-r{border-right-width:1px}.border-t{border-top-width:1px}.border-dashed{border-style:dashed}.border-agentprism-border{--tw-border-opacity: 1;border-color:oklch(var(--agentprism-border) / var(--tw-border-opacity, 1))}.border-agentprism-foreground{--tw-border-opacity: 1;border-color:oklch(var(--agentprism-foreground) / var(--tw-border-opacity, 1))}.border-agentprism-secondary{--tw-border-opacity: 1;border-color:oklch(var(--agentprism-secondary) / var(--tw-border-opacity, 1))}.border-amber-300{--tw-border-opacity: 1;border-color:rgb(252 211 77 / var(--tw-border-opacity, 1))}.border-amber-300\/50{border-color:#fcd34d80}.border-amber-400\/60{border-color:#fbbf2499}.border-amber-500\/40{border-color:#f59e0b66}.border-amber-500\/50{border-color:#f59e0b80}.border-blue-200{--tw-border-opacity: 1;border-color:rgb(191 219 254 / var(--tw-border-opacity, 1))}.border-border{border-color:hsl(var(--border))}.border-border\/60{border-color:hsl(var(--border) / .6)}.border-border\/70{border-color:hsl(var(--border) / .7)}.border-destructive{border-color:hsl(var(--destructive))}.border-destructive\/40{border-color:hsl(var(--destructive) / .4)}.border-destructive\/50{border-color:hsl(var(--destructive) / .5)}.border-emerald-200{--tw-border-opacity: 1;border-color:rgb(167 243 208 / var(--tw-border-opacity, 1))}.border-green-300{--tw-border-opacity: 1;border-color:rgb(134 239 172 / var(--tw-border-opacity, 1))}.border-input{border-color:hsl(var(--input))}.border-primary\/25{border-color:hsl(var(--primary) / .25)}.border-purple-200{--tw-border-opacity: 1;border-color:rgb(233 213 255 / var(--tw-border-opacity, 1))}.border-red-200{--tw-border-opacity: 1;border-color:rgb(254 202 202 / var(--tw-border-opacity, 1))}.border-red-300{--tw-border-opacity: 1;border-color:rgb(252 165 165 / var(--tw-border-opacity, 1))}.border-red-500\/40{border-color:#ef444466}.border-slate-200{--tw-border-opacity: 1;border-color:rgb(226 232 240 / var(--tw-border-opacity, 1))}.border-slate-200\/70{border-color:#e2e8f0b3}.border-slate-200\/80{border-color:#e2e8f0cc}.border-slate-900{--tw-border-opacity: 1;border-color:rgb(15 23 42 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-agentprism-avatar-agent{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-agent) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-chain{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-chain) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-create-agent{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-create-agent) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-embedding{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-embedding) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-event{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-event) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-guardrail{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-guardrail) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-llm{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-llm) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-retrieval{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-retrieval) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-span{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-span) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-tool{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-tool) / var(--tw-bg-opacity, 1))}.bg-agentprism-avatar-unknown{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-avatar-unknown) / var(--tw-bg-opacity, 1))}.bg-agentprism-background{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-background) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-agent{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-agent) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-chain{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-chain) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-create-agent{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-create-agent) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-default{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-default) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-embedding{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-embedding) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-event{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-event) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-guardrail{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-guardrail) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-llm{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-llm) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-retrieval{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-retrieval) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-span{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-span) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-tool{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-tool) / var(--tw-bg-opacity, 1))}.bg-agentprism-badge-unknown{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-badge-unknown) / var(--tw-bg-opacity, 1))}.bg-agentprism-brand{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-brand) / var(--tw-bg-opacity, 1))}.bg-agentprism-error{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-error) / var(--tw-bg-opacity, 1))}.bg-agentprism-error-muted{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-error-muted) / var(--tw-bg-opacity, 1))}.bg-agentprism-muted{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-muted) / var(--tw-bg-opacity, 1))}.bg-agentprism-pending{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-pending) / var(--tw-bg-opacity, 1))}.bg-agentprism-pending-muted{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-pending-muted) / var(--tw-bg-opacity, 1))}.bg-agentprism-primary{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-primary) / var(--tw-bg-opacity, 1))}.bg-agentprism-secondary{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-secondary) / var(--tw-bg-opacity, 1))}.bg-agentprism-secondary\/75{background-color:oklch(var(--agentprism-secondary) / .75)}.bg-agentprism-success{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-success) / var(--tw-bg-opacity, 1))}.bg-agentprism-success-muted{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-success-muted) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-agent{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-agent) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-chain{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-chain) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-create-agent{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-create-agent) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-embedding{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-embedding) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-event{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-event) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-guardrail{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-guardrail) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-llm{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-llm) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-retrieval{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-retrieval) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-span{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-span) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-tool{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-tool) / var(--tw-bg-opacity, 1))}.bg-agentprism-timeline-unknown{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-timeline-unknown) / var(--tw-bg-opacity, 1))}.bg-agentprism-warning{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-warning) / var(--tw-bg-opacity, 1))}.bg-agentprism-warning-muted{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-warning-muted) / var(--tw-bg-opacity, 1))}.bg-amber-50\/70{background-color:#fffbebb3}.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\/\[0\.08\]{background-color:#f59e0b14}.bg-background{background-color:hsl(var(--background))}.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\/80{background-color:hsl(var(--border) / .8)}.bg-card{background-color:hsl(var(--card))}.bg-card\/80{background-color:hsl(var(--card) / .8)}.bg-card\/85{background-color:hsl(var(--card) / .85)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-destructive\/10{background-color:hsl(var(--destructive) / .1)}.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-600{--tw-bg-opacity: 1;background-color:rgb(5 150 105 / var(--tw-bg-opacity, 1))}.bg-green-100{--tw-bg-opacity: 1;background-color:rgb(220 252 231 / var(--tw-bg-opacity, 1))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity, 1))}.bg-muted{background-color:hsl(var(--muted))}.bg-muted\/20{background-color:hsl(var(--muted) / .2)}.bg-muted\/30{background-color:hsl(var(--muted) / .3)}.bg-muted\/50{background-color:hsl(var(--muted) / .5)}.bg-muted\/60{background-color:hsl(var(--muted) / .6)}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-primary\/5{background-color:hsl(var(--primary) / .05)}.bg-purple-100{--tw-bg-opacity: 1;background-color:rgb(243 232 255 / var(--tw-bg-opacity, 1))}.bg-red-100{--tw-bg-opacity: 1;background-color:rgb(254 226 226 / var(--tw-bg-opacity, 1))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity, 1))}.bg-red-500\/10{background-color:#ef44441a}.bg-rose-600{--tw-bg-opacity: 1;background-color:rgb(225 29 72 / var(--tw-bg-opacity, 1))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sky-600{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity, 1))}.bg-slate-100{--tw-bg-opacity: 1;background-color:rgb(241 245 249 / 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-800{--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.bg-slate-950{--tw-bg-opacity: 1;background-color:rgb(2 6 23 / 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-white\/70{background-color:#ffffffb3}.bg-white\/90{background-color:#ffffffe6}.bg-gradient-to-b{background-image:linear-gradient(to bottom,var(--tw-gradient-stops))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-agentprism-muted\/75{--tw-gradient-from: oklch(var(--agentprism-muted) / .75) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-100{--tw-gradient-from: #f1f5f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(241 245 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.from-slate-950{--tw-gradient-from: #020617 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-slate-200{--tw-gradient-to: rgb(226 232 240 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #e2e8f0 var(--tw-gradient-via-position), var(--tw-gradient-to)}.via-slate-900{--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #0f172a var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-agentprism-muted\/75{--tw-gradient-to: oklch(var(--agentprism-muted) / .75) var(--tw-gradient-to-position)}.to-slate-100{--tw-gradient-to: #f1f5f9 var(--tw-gradient-to-position)}.to-slate-800{--tw-gradient-to: #1e293b var(--tw-gradient-to-position)}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-0{padding:0}.p-1{padding:.25rem}.p-1\.5{padding:.375rem}.p-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.p-\[1px\]{padding:1px}.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-7{padding-left:1.75rem;padding-right:1.75rem}.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-12{padding-top:3rem;padding-bottom:3rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pl-1{padding-left:.25rem}.pl-10{padding-left:2.5rem}.pl-2{padding-left:.5rem}.pl-5{padding-left:1.25rem}.pl-6{padding-left:1.5rem}.pl-8{padding-left:2rem}.pr-1{padding-right:.25rem}.pr-10{padding-right:2.5rem}.pr-2{padding-right:.5rem}.pr-6{padding-right:1.5rem}.pr-8{padding-right:2rem}.pr-9{padding-right:2.25rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-2{padding-top:.5rem}.pt-3{padding-top:.75rem}.pt-6{padding-top:1.5rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-\[1\.5em\]{font-size:1.5em}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.text-\[20px\]{font-size:20px}.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-semibold{font-weight:600}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.italic{font-style:italic}.leading-3{line-height:.75rem}.leading-7{line-height:1.75rem}.leading-\[14px\]{line-height:14px}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-\[-0\.025em\]{letter-spacing:-.025em}.tracking-\[0\.04em\]{letter-spacing:.04em}.tracking-\[0\.12em\]{letter-spacing:.12em}.tracking-\[0\.16em\]{letter-spacing:.16em}.tracking-\[0\.18em\]{letter-spacing:.18em}.tracking-\[0\.1em\]{letter-spacing:.1em}.tracking-\[0\.22em\]{letter-spacing:.22em}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-normal{letter-spacing:0em}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-widest{letter-spacing:.1em}.text-agentprism-accent{--tw-text-opacity: 1;color:oklch(var(--agentprism-accent) / var(--tw-text-opacity, 1))}.text-agentprism-badge-agent-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-agent-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-chain-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-chain-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-create-agent-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-create-agent-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-default-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-default-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-embedding-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-embedding-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-event-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-event-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-guardrail-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-guardrail-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-llm-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-llm-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-retrieval-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-retrieval-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-span-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-span-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-tool-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-tool-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-badge-unknown-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-badge-unknown-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-brand-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-brand-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-error-muted-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-error-muted-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-muted-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-muted-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-pending-muted-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-pending-muted-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-primary-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-primary-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-secondary-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-secondary-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-success-muted-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-success-muted-foreground) / var(--tw-text-opacity, 1))}.text-agentprism-warning-muted-foreground{--tw-text-opacity: 1;color:oklch(var(--agentprism-warning-muted-foreground) / var(--tw-text-opacity, 1))}.text-amber-100{--tw-text-opacity: 1;color:rgb(254 243 199 / var(--tw-text-opacity, 1))}.text-amber-700{--tw-text-opacity: 1;color:rgb(180 83 9 / var(--tw-text-opacity, 1))}.text-amber-950{--tw-text-opacity: 1;color:rgb(69 26 3 / var(--tw-text-opacity, 1))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-800{--tw-text-opacity: 1;color:rgb(30 64 175 / var(--tw-text-opacity, 1))}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-600{--tw-text-opacity: 1;color:rgb(5 150 105 / var(--tw-text-opacity, 1))}.text-emerald-800{--tw-text-opacity: 1;color:rgb(6 95 70 / var(--tw-text-opacity, 1))}.text-foreground{color:hsl(var(--foreground))}.text-foreground\/50{color:hsl(var(--foreground) / .5)}.text-green-700{--tw-text-opacity: 1;color:rgb(21 128 61 / var(--tw-text-opacity, 1))}.text-green-800{--tw-text-opacity: 1;color:rgb(22 101 52 / var(--tw-text-opacity, 1))}.text-inherit{color:inherit}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-muted-foreground\/40{color:hsl(var(--muted-foreground) / .4)}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-purple-800{--tw-text-opacity: 1;color:rgb(107 33 168 / var(--tw-text-opacity, 1))}.text-red-100{--tw-text-opacity: 1;color:rgb(254 226 226 / 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-red-800{--tw-text-opacity: 1;color:rgb(153 27 27 / var(--tw-text-opacity, 1))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.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-900{--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.text-white\/70{color:#ffffffb3}.text-white\/75{color:#ffffffbf}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-foreground{accent-color:hsl(var(--foreground))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.mix-blend-soft-light{mix-blend-mode:soft-light}.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-\[0_0_6px_rgba\(15\,23\,42\,0\.32\)\]{--tw-shadow: 0 0 6px rgba(15,23,42,.32);--tw-shadow-colored: 0 0 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-\[0_16px_48px_rgba\(15\,23\,42\,0\.08\)\]{--tw-shadow: 0 16px 48px rgba(15,23,42,.08);--tw-shadow-colored: 0 16px 48px 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_25px_80px_rgba\(15\,23\,42\,0\.12\)\]{--tw-shadow: 0 25px 80px rgba(15,23,42,.12);--tw-shadow-colored: 0 25px 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_4px_16px_rgba\(15\,23\,42\,0\.18\)\]{--tw-shadow: 0 4px 16px rgba(15,23,42,.18);--tw-shadow-colored: 0 4px 16px 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_4px_rgba\(15\,23\,42\,0\.12\)\]{--tw-shadow: inset 0 -1px 4px rgba(15,23,42,.12);--tw-shadow-colored: inset 0 -1px 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-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-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.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)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.ring-0{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + 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-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)}.grayscale{--tw-grayscale: grayscale(100%);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.backdrop-blur-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}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.animate-in{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.fade-in-0{--tw-enter-opacity: 0}.zoom-in-50{--tw-enter-scale: .5}.zoom-in-95{--tw-enter-scale: .95}.duration-200{animation-duration:.2s}.duration-300{animation-duration:.3s}.ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.running{animation-play-state:running}.paused{animation-play-state:paused}.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-agentprism-foreground\/50::-moz-placeholder{color:oklch(var(--agentprism-foreground) / .5)}.placeholder\:text-agentprism-foreground\/50::placeholder{color:oklch(var(--agentprism-foreground) / .5)}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:-top-2:before{content:var(--tw-content);top:-.5rem}.before\:h-2:before{content:var(--tw-content);height:.5rem}.before\:w-full:before{content:var(--tw-content);width:100%}.before\:bg-agentprism-muted\/75:before{content:var(--tw-content);background-color:oklch(var(--agentprism-muted) / .75)}.last\:border-b-0:last-child{border-bottom-width:0px}.hover\:-translate-y-1:hover{--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))}.hover\:border-agentprism-border-strong:hover{--tw-border-opacity: 1;border-color:oklch(var(--agentprism-border-strong) / var(--tw-border-opacity, 1))}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-agentprism-secondary:hover{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-secondary) / var(--tw-bg-opacity, 1))}.hover\:bg-agentprism-secondary\/45:hover{background-color:oklch(var(--agentprism-secondary) / .45)}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-muted:hover{background-color:hsl(var(--muted))}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted) / .5)}.hover\:bg-primary\/20:hover{background-color:hsl(var(--primary) / .2)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary:hover{background-color:hsl(var(--secondary))}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:bg-transparent:hover{background-color:transparent}.hover\:bg-white\/10:hover{background-color:#ffffff1a}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-emerald-700:hover{--tw-text-opacity: 1;color:rgb(4 120 87 / var(--tw-text-opacity, 1))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-muted-foreground:hover{color:hsl(var(--muted-foreground))}.hover\:text-slate-900:hover{--tw-text-opacity: 1;color:rgb(15 23 42 / 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\:opacity-70:hover{opacity:.7}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:text-destructive:focus{color:hsl(var(--destructive))}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-1:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-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-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-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-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.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))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.group:hover .group-hover\:text-muted-foreground{color:hsl(var(--muted-foreground))}.group:hover .group-hover\:opacity-100{opacity:1}.group.destructive .group-\[\.destructive\]\:border-muted\/40{border-color:hsl(var(--muted) / .4)}.group.destructive .group-\[\.destructive\]\:text-red-300{--tw-text-opacity: 1;color:rgb(252 165 165 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:hover\:border-destructive\/30:hover{border-color:hsl(var(--destructive) / .3)}.group.destructive .group-\[\.destructive\]\:hover\:bg-destructive:hover{background-color:hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:hover\:text-destructive-foreground:hover{color:hsl(var(--destructive-foreground))}.group.destructive .group-\[\.destructive\]\:hover\:text-red-50:hover{--tw-text-opacity: 1;color:rgb(254 242 242 / var(--tw-text-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-destructive:focus{--tw-ring-color: hsl(var(--destructive))}.group.destructive .group-\[\.destructive\]\:focus\:ring-red-400:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(248 113 113 / var(--tw-ring-opacity, 1))}.group.destructive .group-\[\.destructive\]\:focus\:ring-offset-red-600:focus{--tw-ring-offset-color: #dc2626}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[state\=inactive\]\:hidden[data-state=inactive]{display: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\=checked\]\:translate-x-4[data-state=checked]{--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))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked],.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x: var(--radix-toast-swipe-end-x);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-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x: var(--radix-toast-swipe-move-x);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\=active\]\:border-agentprism-border-inverse[data-state=active]{--tw-border-opacity: 1;border-color:oklch(var(--agentprism-border-inverse) / var(--tw-border-opacity, 1))}.data-\[state\=on\]\:border-slate-900\/20[data-state=on]{border-color:#0f172a33}.data-\[state\=active\]\:bg-agentprism-background[data-state=active]{--tw-bg-opacity: 1;background-color:oklch(var(--agentprism-background) / var(--tw-bg-opacity, 1))}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:hsl(var(--accent))}.data-\[state\=on\]\:bg-slate-900[data-state=on]{--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:hsl(var(--muted-foreground))}.data-\[state\=active\]\:text-agentprism-foreground[data-state=active]{--tw-text-opacity: 1;color:oklch(var(--agentprism-foreground) / var(--tw-text-opacity, 1))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:hsl(var(--accent-foreground))}.data-\[state\=on\]\:text-white[data-state=on]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[state\=active\]\:shadow[data-state=active]{--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)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--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)}.data-\[state\=on\]\:shadow-\[0_4px_12px_rgba\(15\,23\,42\,0\.3\)\][data-state=on]{--tw-shadow: 0 4px 12px rgba(15,23,42,.3);--tw-shadow-colored: 0 4px 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)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}.data-\[state\=closed\]\:duration-300[data-state=closed]{transition-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{transition-duration:.5s}.data-\[state\=open\]\:animate-in[data-state=open]{animation-name:enter;animation-duration:.15s;--tw-enter-opacity: initial;--tw-enter-scale: initial;--tw-enter-rotate: initial;--tw-enter-translate-x: initial;--tw-enter-translate-y: initial}.data-\[state\=closed\]\:animate-out[data-state=closed],.data-\[swipe\=end\]\:animate-out[data-swipe=end]{animation-name:exit;animation-duration:.15s;--tw-exit-opacity: initial;--tw-exit-scale: initial;--tw-exit-rotate: initial;--tw-exit-translate-x: initial;--tw-exit-translate-y: initial}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity: 0}.data-\[state\=closed\]\:fade-out-80[data-state=closed]{--tw-exit-opacity: .8}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity: 0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale: .95}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale: .95}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y: -.5rem}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x: .5rem}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x: -.5rem}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y: .5rem}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y: 100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x: -100%}.data-\[state\=closed\]\:slide-out-to-left-1\/2[data-state=closed]{--tw-exit-translate-x: -50%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed],.data-\[state\=closed\]\:slide-out-to-right-full[data-state=closed]{--tw-exit-translate-x: 100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y: -100%}.data-\[state\=closed\]\:slide-out-to-top-\[48\%\][data-state=closed]{--tw-exit-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y: 100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x: -100%}.data-\[state\=open\]\:slide-in-from-left-1\/2[data-state=open]{--tw-enter-translate-x: -50%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x: 100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=open\]\:slide-in-from-top-\[48\%\][data-state=open]{--tw-enter-translate-y: -48%}.data-\[state\=open\]\:slide-in-from-top-full[data-state=open]{--tw-enter-translate-y: -100%}.data-\[state\=closed\]\:duration-300[data-state=closed]{animation-duration:.3s}.data-\[state\=open\]\:duration-500[data-state=open]{animation-duration:.5s}.group[data-state=active] .group-data-\[state\=active\]\:text-current{color:currentColor}.dark\:border-amber-700\/50:is(.dark *){border-color:#b4530980}.dark\:border-blue-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 64 175 / var(--tw-border-opacity, 1))}.dark\:border-border\/60:is(.dark *){border-color:hsl(var(--border) / .6)}.dark\:border-destructive:is(.dark *){border-color:hsl(var(--destructive))}.dark\:border-emerald-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(6 95 70 / var(--tw-border-opacity, 1))}.dark\:border-primary\/25:is(.dark *){border-color:hsl(var(--primary) / .25)}.dark\:border-purple-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(107 33 168 / var(--tw-border-opacity, 1))}.dark\:border-red-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(153 27 27 / var(--tw-border-opacity, 1))}.dark\:border-slate-100:is(.dark *){--tw-border-opacity: 1;border-color:rgb(241 245 249 / var(--tw-border-opacity, 1))}.dark\:border-slate-800:is(.dark *){--tw-border-opacity: 1;border-color:rgb(30 41 59 / var(--tw-border-opacity, 1))}.dark\:border-slate-800\/60:is(.dark *){border-color:#1e293b99}.dark\:border-slate-800\/70:is(.dark *){border-color:#1e293bb3}.dark\:bg-agentprism-muted\/80:is(.dark *){background-color:oklch(var(--agentprism-muted) / .8)}.dark\:bg-amber-950\/30:is(.dark *){background-color:#451a034d}.dark\:bg-blue-900\/30:is(.dark *){background-color:#1e3a8a4d}.dark\:bg-emerald-900\/30:is(.dark *){background-color:#064e3b4d}.dark\:bg-green-900\/20:is(.dark *){background-color:#14532d33}.dark\:bg-green-900\/30:is(.dark *){background-color:#14532d4d}.dark\:bg-primary\/5:is(.dark *){background-color:hsl(var(--primary) / .05)}.dark\:bg-purple-900\/30:is(.dark *){background-color:#581c874d}.dark\:bg-red-900\/20:is(.dark *){background-color:#7f1d1d33}.dark\:bg-red-900\/30:is(.dark *){background-color:#7f1d1d4d}.dark\:bg-slate-200:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(226 232 240 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-800:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(30 41 59 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-900:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(15 23 42 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-950:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(2 6 23 / var(--tw-bg-opacity, 1))}.dark\:bg-slate-950\/20:is(.dark *){background-color:#02061733}.dark\:bg-slate-950\/40:is(.dark *){background-color:#02061766}.dark\:bg-slate-950\/70:is(.dark *){background-color:#020617b3}.dark\:bg-slate-950\/80:is(.dark *){background-color:#020617cc}.dark\:from-slate-100:is(.dark *){--tw-gradient-from: #f1f5f9 var(--tw-gradient-from-position);--tw-gradient-to: rgb(241 245 249 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:from-slate-950:is(.dark *){--tw-gradient-from: #020617 var(--tw-gradient-from-position);--tw-gradient-to: rgb(2 6 23 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.dark\:via-slate-50:is(.dark *){--tw-gradient-to: rgb(248 250 252 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), #f8fafc var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:via-slate-900\/80:is(.dark *){--tw-gradient-to: rgb(15 23 42 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), rgb(15 23 42 / .8) var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:to-black:is(.dark *){--tw-gradient-to: #000 var(--tw-gradient-to-position)}.dark\:to-slate-200:is(.dark *){--tw-gradient-to: #e2e8f0 var(--tw-gradient-to-position)}.dark\:text-amber-100:is(.dark *){--tw-text-opacity: 1;color:rgb(254 243 199 / 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-400:is(.dark *){--tw-text-opacity: 1;color:rgb(96 165 250 / 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-green-400:is(.dark *){--tw-text-opacity: 1;color:rgb(74 222 128 / var(--tw-text-opacity, 1))}.dark\:text-purple-400:is(.dark *){--tw-text-opacity: 1;color:rgb(192 132 252 / var(--tw-text-opacity, 1))}.dark\:text-red-400:is(.dark *){--tw-text-opacity: 1;color:rgb(248 113 113 / var(--tw-text-opacity, 1))}.dark\:text-slate-300:is(.dark *){--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity, 1))}.dark\:text-slate-400:is(.dark *){--tw-text-opacity: 1;color:rgb(148 163 184 / var(--tw-text-opacity, 1))}.dark\:text-slate-700:is(.dark *){--tw-text-opacity: 1;color:rgb(51 65 85 / var(--tw-text-opacity, 1))}.dark\:text-slate-950:is(.dark *){--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:opacity-40:is(.dark *){opacity:.4}.dark\:opacity-60:is(.dark *){opacity:.6}.dark\:shadow-\[0_0_6px_rgba\(226\,232\,240\,0\.28\)\]:is(.dark *){--tw-shadow: 0 0 6px rgba(226,232,240,.28);--tw-shadow-colored: 0 0 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)}.dark\:shadow-\[0_16px_48px_rgba\(0\,0\,0\,0\.45\)\]:is(.dark *){--tw-shadow: 0 16px 48px rgba(0,0,0,.45);--tw-shadow-colored: 0 16px 48px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:shadow-\[0_4px_16px_rgba\(0\,0\,0\,0\.35\)\]:is(.dark *){--tw-shadow: 0 4px 16px rgba(0,0,0,.35);--tw-shadow-colored: 0 4px 16px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.dark\:hover\:bg-agentprism-muted\/70:hover:is(.dark *){background-color:oklch(var(--agentprism-muted) / .7)}.dark\:hover\:bg-slate-950\/10:hover:is(.dark *){background-color:#0206171a}.dark\:hover\:text-slate-950:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(2 6 23 / var(--tw-text-opacity, 1))}.dark\:hover\:text-white:hover:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:data-\[state\=on\]\:border-white\/30[data-state=on]:is(.dark *){border-color:#ffffff4d}.dark\:data-\[state\=on\]\:bg-white[data-state=on]:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.dark\:data-\[state\=on\]\:text-slate-900[data-state=on]:is(.dark *){--tw-text-opacity: 1;color:rgb(15 23 42 / var(--tw-text-opacity, 1))}.dark\:data-\[state\=active\]\:shadow-none[data-state=active]:is(.dark *){--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}@media(min-width:640px){.sm\:bottom-0{bottom:0}.sm\:right-0{right:0}.sm\:top-auto{top:auto}.sm\:col-span-2{grid-column:span 2 / span 2}.sm\:mt-0{margin-top:0}.sm\:max-w-2xl{max-width:42rem}.sm\:max-w-\[500px\]{max-width:500px}.sm\:max-w-sm{max-width:24rem}.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\:flex-col{flex-direction:column}.sm\:items-start{align-items:flex-start}.sm\:items-end{align-items:flex-end}.sm\:items-center{align-items:center}.sm\:justify-end{justify-content:flex-end}.sm\:justify-between{justify-content:space-between}.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:var(--radius)}.sm\:text-left{text-align:left}.data-\[state\=open\]\:sm\:slide-in-from-bottom-full[data-state=open]{--tw-enter-translate-y: 100%}}@media(min-width:768px){.md\:flex{display:flex}.md\:w-\[320px\]{width:320px}.md\:max-w-\[420px\]{max-width:420px}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-4{gap:1rem}.md\:text-\[14px\]{font-size:14px}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media(min-width:1024px){.lg\:block{display:block}.lg\:hidden{display:none}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:gap-6{gap:1.5rem}.lg\:px-6{padding-left:1.5rem;padding-right:1.5rem}.lg\:py-8{padding-top:2rem;padding-bottom:2rem}}@media(min-width:1280px){.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media(min-width:1536px){.\32xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}.\[\&\+div\]\:text-xs+div{font-size:.75rem;line-height:1rem}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.data-\[state\=inactive\]\:\[\&\:not\(\:disabled\)\]\:hover\:border-agentprism-border-inverse\/20:hover:not(:disabled)[data-state=inactive]{border-color:oklch(var(--agentprism-border-inverse) / .2)}.data-\[state\=inactive\]\:\[\&\:not\(\:disabled\)\]\:hover\:bg-agentprism-background\/50:hover:not(:disabled)[data-state=inactive]{background-color:oklch(var(--agentprism-background) / .5)}.data-\[state\=inactive\]\:\[\&\:not\(\:disabled\)\]\:hover\:text-agentprism-muted-foreground:hover:not(:disabled)[data-state=inactive]{--tw-text-opacity: 1;color:oklch(var(--agentprism-muted-foreground) / var(--tw-text-opacity, 1))}.\[\&\:not\(\:last-child\)\]\:border-b:not(:last-child){border-bottom-width:1px}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y: 2px;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))}.\[\&\>span\]\:line-clamp-1>span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\[\&\>svg\+div\]\:translate-y-\[-3px\]>svg+div{--tw-translate-y: -3px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:absolute>svg{position:absolute}.\[\&\>svg\]\:left-4>svg{left:1rem}.\[\&\>svg\]\:top-4>svg{top:1rem}.\[\&\>svg\]\:size-4>svg{width:1rem;height:1rem}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-destructive>svg{color:hsl(var(--destructive))}.\[\&\>svg\]\:text-foreground>svg{color:hsl(var(--foreground))}.\[\&\>svg\~\*\]\:pl-7>svg~*{padding-left:1.75rem}.\[\&\>tr\]\:last\:border-b-0:last-child>tr{border-bottom-width:0px}.\[\&_p\]\:leading-relaxed p{line-height:1.625}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:block svg{display:block}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:h-full svg{height:100%}.\[\&_svg\]\:w-full svg{width:100%}.\[\&_svg\]\:max-w-none svg{max-width:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-width:0px}.\[\&_tr\]\:border-b tr{border-bottom-width:1px}
@@ -1 +0,0 @@
1
- import{s as t,b as r,a,S as s}from"./chunk-DI55MBZ5-qyPhcZF3.js";import{_ as i}from"./index-DLYzf0K-.js";import"./chunk-55IACEB6-DQZDNQUo.js";import"./chunk-QN33PNHL-DHlMh8NC.js";var l={parser:a,get db(){return new s(2)},renderer:r,styles:t,init:i(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{l as diagram};
@@ -1,199 +0,0 @@
1
- # Studio Feature Modules
2
-
3
- Each row corresponds to one source script (test files excluded).
4
-
5
- | Module path (relative to `features/`) | Purpose |
6
- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
7
- | **account** | |
8
- | `account/components/settings/agent-settings-tab.tsx` | Settings tab for managing external agent integrations (Claude Code, Codex, Gemini) and their login sessions. |
9
- | `account/components/settings/appearance-settings-tab.tsx` | Settings tab for theme selection (light / dark / system). |
10
- | `account/components/settings/theme-settings.tsx` | Button group UI for picking light, dark, or system theme. |
11
- | `account/components/use-theme-preferences.ts` | Hook that reads and persists user theme, accent-colour, reduced-motion, and high-contrast preferences. |
12
- | `account/pages/profile/profile-general-tab.tsx` | Profile tab displaying user avatar, name, email, role, and join date. |
13
- | `account/pages/profile/types.ts` | `ProfileUser` interface (name, email, avatar, role, optional joinDate). |
14
- | `account/pages/profile.tsx` | Profile page that composes the general-info tab and any additional settings tabs. |
15
- | `account/pages/settings.tsx` | Settings page with tabs for agent integrations and appearance preferences. |
16
- | `account/pages/workspace-members.tsx` | Tab content for listing and managing workspace members with role-based access control. |
17
- | `account/pages/service-tokens.tsx` | Tab content for creating, rotating, and revoking workspace-scoped API keys used by the Orcheo SDK. |
18
- | `account/pages/workspace-management.tsx` | Workspace Management page with tabs for members, external agents, and API keys. |
19
- | `account/components/external-agents-section.tsx` | Section for connecting and managing per-workspace external agent CLIs (Claude Code, Codex, Gemini). |
20
- | **auth** | |
21
- | `auth/components/auto-login.tsx` | Initiates an OIDC login redirect automatically, forwarding org / invitation / hint query params. |
22
- | `auth/components/require-auth.tsx` | Route guard that verifies auth state and refreshes tokens before rendering protected children. |
23
- | `auth/lib/auth-session.ts` | Manages JWT tokens, user profile, and session state in `localStorage`; supports SSO. |
24
- | `auth/lib/oidc-client.ts` | OIDC/OAuth2 client handling PKCE flow, token exchange, and session management. |
25
- | `auth/pages/login.tsx` | Login page that parses invite-context params and mounts `AutoLogin`. |
26
- | `auth/pages/oauth-callback.tsx` | OAuth callback handler that completes OIDC login, stores tokens, and redirects to the intended URL. |
27
- | **chatkit** | |
28
- | `chatkit/components/studio-chat-bubble.tsx` | Floating chat-bubble component for the workflow page, positioned above the React Flow minimap. |
29
- | `chatkit/components/chatkit-surface.tsx` | Wrapper around the ChatKit library that handles custom action dispatching and error reporting. |
30
- | `chatkit/components/public-chat-config.ts` | Builds ChatKit start-screen prompt and model-option configuration from workflow settings. |
31
- | `chatkit/components/public-chat-error-boundary.tsx` | Error boundary that catches and gracefully displays errors inside the public chat widget. |
32
- | `chatkit/components/public-chat-widget.tsx` | Public-facing ChatKit widget that wires up theme, auth, and workflow configuration. |
33
- | `chatkit/lib/chatkit-client.ts` | HTTP client for ChatKit API requests with error handling and domain-key management. |
34
- | `chatkit/lib/chatkit-theme.ts` | Builds a ChatKit UI theme from the current light/dark colour-scheme preference. |
35
- | `chatkit/lib/telemetry.ts` | Dispatches telemetry events for ChatKit interactions (open, close, success, failure). |
36
- | `chatkit/lib/workflow-session.ts` | Manages ChatKit workflow client-secrets with automatic refresh and retry logic. |
37
- | `chatkit/pages/public-chat.tsx` | Public shareable chat page for a workflow, with theme switching and workflow metadata display. |
38
- | **shared** | |
39
- | `shared/components/chat-interface-options.ts` | Builds ChatKit initialisation options (API endpoint, auth, model config). |
40
- | `shared/components/chat-interface.types.ts` | `ChatInterface` props and `ChatParticipant` types. |
41
- | `shared/components/top-navigation/account-menu.tsx` | Dropdown menu for account settings, credentials, profile, workspace members, and logout. |
42
- | `shared/components/top-navigation/active-workspace-indicator.tsx` | Displays the active workspace name and lets the user switch between workspaces. |
43
- | `shared/components/top-navigation/studio-brand.tsx` | Brand logo linking to the gallery, with a beta status badge. |
44
- | `shared/components/top-navigation/top-navigation-types.ts` | `TopNavigation` props interface (credentials, credential handlers). |
45
- | `shared/components/top-navigation.tsx` | Top navigation bar: brand, workspace selector, version status, and account menu. |
46
- | `shared/components/top-navigation/version-status.tsx` | Checks for and displays available Studio version updates, with result caching. |
47
- | `shared/components/workspace-bootstrap-gate.tsx` | Ensures the user has at least one workspace, creating a default one if necessary, before rendering children. |
48
- | **vibe** | |
49
- | `vibe/components/vibe-authenticated-layout.tsx` | Main authenticated layout for Vibe: resizable sidebar with workspace bootstrap gate. |
50
- | `vibe/components/vibe-sidebar.tsx` | Sidebar component for the Vibe agent-chat interface, including provider selection and chat surface. |
51
- | `vibe/constants.ts` | Constants for Vibe sidebar dimensions, agent tag, workflow name, and participant metadata. |
52
- | `vibe/context/vibe-context.ts` | React context definition for Vibe state (open status, providers, workflow ID, context string). |
53
- | `vibe/context/vibe-provider.tsx` | Context provider managing Vibe state: agent list, workflow provisioning, and page context. |
54
- | `vibe/hooks/use-vibe-agents.ts` | Fetches and caches external agent provider status with polling and transient-error handling. |
55
- | `vibe/hooks/use-vibe-chat.ts` | Manages the Vibe chat session lifecycle including client-secret refresh and retry logic. |
56
- | `vibe/hooks/use-vibe-context-string.ts` | Builds the context string that describes the user's current page location for the Vibe AI. |
57
- | `vibe/hooks/use-vibe-workflow.ts` | Manages Vibe agent workflow provisioning, template synchronisation, and workspace storage. |
58
- | `vibe/lib/vibe-models.ts` | Builds ChatKit model options for the Vibe composer based on available external agent providers. |
59
- | **workflow / dialogs** | |
60
- | `workflow/components/dialogs/add-credential-dialog.tsx` | Dialog for creating a new credential (name, provider, access level, secret). |
61
- | `workflow/components/dialogs/confirm-delete-workflow-dialog.tsx` | Confirmation dialog for permanently deleting a workflow. |
62
- | `workflow/components/dialogs/credential-access-badge.tsx` | Badge showing a credential's access level (scoped vs. shared). |
63
- | `workflow/components/dialogs/credential-status-badge.tsx` | Badge indicating a credential's health status (healthy / unhealthy / unknown). |
64
- | `workflow/components/dialogs/credentials-table.tsx` | Table listing credentials with status, access level, and edit/delete/reveal-secret actions. |
65
- | `workflow/components/dialogs/credentials-vault.tsx` | Full credentials-vault UI: search, add, edit, and delete credentials. |
66
- | `workflow/components/dialogs/edit-credential-dialog.tsx` | Dialog for editing an existing credential's name, provider, access level, and secrets. |
67
- | `workflow/components/dialogs/update-workflow-dialog.tsx` | Dialog for uploading a new version of a workflow's script and configuration files. |
68
- | `workflow/components/dialogs/upload-workflow-dialog.tsx` | Dialog for uploading a brand-new workflow with script and configuration files. |
69
- | **workflow / forms & layouts** | |
70
- | `workflow/components/forms/schema-config-form.tsx` | RJSF form wrapper for workflow runtime configuration, using custom widgets and templates. |
71
- | `workflow/components/layouts/sidebar-layout.tsx` | Resizable two-panel layout with collapsible sidebar. |
72
- | `workflow/components/layouts/use-sidebar-resize.ts` | Hook that handles sidebar drag-resize with min/max width constraints. |
73
- | `workflow/components/layouts/workflow-page-layout.tsx` | Generic page scaffold with optional header and main-content areas. |
74
- | **workflow / panels (RJSF & history)** | |
75
- | `workflow/components/panels/rjsf-basic-widgets.tsx` | RJSF widgets for basic input types: text, number, checkbox, and select. |
76
- | `workflow/components/panels/rjsf-input-widgets.tsx` | Primitive RJSF input widgets: number, checkbox, and select. |
77
- | `workflow/components/panels/rjsf-templates.tsx` | RJSF field and array item templates controlling form layout and styling. |
78
- | `workflow/components/panels/rjsf-text-widgets.tsx` | Text RJSF widgets (input, textarea) with schema drag-and-drop field insertion. |
79
- | `workflow/components/panels/rjsf-theme.tsx` | RJSF theme wiring together custom widgets, templates, and validator. |
80
- | `workflow/components/panels/schema-dnd.ts` | Drag-and-drop utilities for inserting `{{field}}` references from schema into text inputs. |
81
- | `workflow/components/panels/workflow-diff-dialog.tsx` | Dialog that displays a human-readable diff between two workflow versions. |
82
- | `workflow/components/panels/workflow-history-filters.tsx` | Filter bar for the workflow history panel (text search, version picker). |
83
- | `workflow/components/panels/workflow-history-footer.tsx` | Pagination footer for the workflow version history list. |
84
- | `workflow/components/panels/workflow-history-header.tsx` | Header with "Restore" and "Compare" buttons for the workflow history panel. |
85
- | `workflow/components/panels/workflow-history-table.tsx` | Table of workflow versions with status badges, change summaries, and row selection. |
86
- | `workflow/components/panels/workflow-history.tsx` | Assembled workflow history panel: filters, table, diff dialog, and restore action. |
87
- | `workflow/components/panels/workflow-tabs.tsx` | Tab bar for switching between the workflow editor, trace, and settings views. |
88
- | **workflow / trace components (agent-prism)** | |
89
- | `workflow/components/trace/agent-prism/Avatar.tsx` | Avatar component for trace span categories with configurable sizes. |
90
- | `workflow/components/trace/agent-prism/Badge.tsx` | Badge component for trace span attributes with optional icon. |
91
- | `workflow/components/trace/agent-prism/BrandLogo.tsx` | Brand logo used inside the trace viewer. |
92
- | `workflow/components/trace/agent-prism/Button.tsx` | Generic button used across trace viewer components. |
93
- | `workflow/components/trace/agent-prism/CollapseAndExpandControls.tsx` | Controls for collapsing / expanding all trace tree nodes at once. |
94
- | `workflow/components/trace/agent-prism/CollapsibleSection.tsx` | Reusable collapsible section wrapper for trace detail panels. |
95
- | `workflow/components/trace/agent-prism/CopyButton.tsx` | Button that copies text content to the clipboard. |
96
- | `workflow/components/trace/agent-prism/IconButton.tsx` | Icon-only button primitive used across the trace viewer. |
97
- | `workflow/components/trace/agent-prism/PriceBadge.tsx` | Badge showing the cost of a trace span. |
98
- | `workflow/components/trace/agent-prism/SearchInput.tsx` | Search input for filtering trace spans. |
99
- | `workflow/components/trace/agent-prism/SpanBadge.tsx` | Badge that labels a span type or category. |
100
- | `workflow/components/trace/agent-prism/SpanStatus.tsx` | Visual indicator for a span's execution status. |
101
- | `workflow/components/trace/agent-prism/TabSelector.tsx` | Tab-selector control for the trace detail view panes. |
102
- | `workflow/components/trace/agent-prism/Tabs.tsx` | Tabs container for the trace detail view. |
103
- | `workflow/components/trace/agent-prism/TextInput.tsx` | Text input primitive used inside trace viewer forms. |
104
- | `workflow/components/trace/agent-prism/TimestampBadge.tsx` | Badge displaying a span's start time or duration. |
105
- | `workflow/components/trace/agent-prism/TokensBadge.tsx` | Badge showing LLM token counts for a span. |
106
- | `workflow/components/trace/agent-prism/TreeView.tsx` | Recursive tree view component for rendering the span hierarchy. |
107
- | `workflow/components/trace/agent-prism/DetailsView/DetailsView.tsx` | Container for the trace span detail panel with tabbed sub-views. |
108
- | `workflow/components/trace/agent-prism/DetailsView/DetailsViewAttributesTab.tsx` | Attributes tab showing key/value metadata for a span. |
109
- | `workflow/components/trace/agent-prism/DetailsView/DetailsViewContentViewer.tsx` | Generic content viewer for rendering span input/output data. |
110
- | `workflow/components/trace/agent-prism/DetailsView/DetailsViewHeader.tsx` | Header for the span detail panel showing span name and status. |
111
- | `workflow/components/trace/agent-prism/DetailsView/DetailsViewInputOutputTab.tsx` | Input/output tab rendering a span's request and response data. |
112
- | `workflow/components/trace/agent-prism/DetailsView/DetailsViewJsonOutput.tsx` | JSON renderer used to display span output in the detail panel. |
113
- | `workflow/components/trace/agent-prism/DetailsView/DetailsViewRawDataTab.tsx` | Raw-data tab showing the full unprocessed span payload. |
114
- | `workflow/components/trace/agent-prism/SpanCard/SpanCard.tsx` | Card component that renders a single trace span inside the tree view. |
115
- | `workflow/components/trace/agent-prism/SpanCard/SpanCardBadges.tsx` | Badge row on a span card (status, tokens, cost, duration). |
116
- | `workflow/components/trace/agent-prism/SpanCard/SpanCardConnector.tsx` | Vertical connector line linking parent and child span cards in the tree. |
117
- | `workflow/components/trace/agent-prism/SpanCard/SpanCardTimeline.tsx` | Horizontal timeline bar visualising a span's position and duration. |
118
- | `workflow/components/trace/agent-prism/SpanCard/SpanCardToggle.tsx` | Expand/collapse toggle button on a span card. |
119
- | `workflow/components/trace/agent-prism/TraceList/TraceList.tsx` | List of all traces for a workflow execution. |
120
- | `workflow/components/trace/agent-prism/TraceList/TraceListItem.tsx` | Individual item in the trace list. |
121
- | `workflow/components/trace/agent-prism/TraceList/TraceListItemHeader.tsx` | Header row for a trace list item (name, status, timestamp). |
122
- | `workflow/components/trace/agent-prism/TraceViewer/TraceViewer.tsx` | Top-level trace viewer component integrating tree, detail, and search. |
123
- | `workflow/components/trace/agent-prism/TraceViewer/TraceViewerDesktopLayout.tsx` | Desktop two-column layout for the trace viewer. |
124
- | `workflow/components/trace/agent-prism/TraceViewer/TraceViewerMobileLayout.tsx` | Mobile single-column layout for the trace viewer. |
125
- | `workflow/components/trace/agent-prism/TraceViewer/TraceViewerPlaceholder.tsx` | Empty-state placeholder shown when no trace is selected. |
126
- | `workflow/components/trace/agent-prism/TraceViewer/TraceViewerSearchAndControls.tsx` | Search bar and collapse/expand controls for the trace viewer. |
127
- | `workflow/components/trace/agent-prism/TraceViewer/TraceViewerTreeViewContainer.tsx` | Scrollable container wrapping the span tree view. |
128
- | `workflow/components/trace/agent-prism/TraceViewer/useTraceSelection.ts` | Hook managing which trace and span are currently selected in the viewer. |
129
- | `workflow/components/trace/agent-prism/index.ts` | Public barrel export for the agent-prism trace viewer library. |
130
- | `workflow/components/trace/agent-prism/shared.ts` | Shared utilities and constants used across agent-prism components. |
131
- | `workflow/components/trace/agent-prism/theme/index.ts` | Theme tokens and configuration for the agent-prism trace viewer. |
132
- | **workflow / data & templates** | |
133
- | `workflow/data/templates/candidate-badges.ts` | Types and utilities for workflow template candidate definitions. |
134
- | `workflow/data/templates/index.ts` | Barrel export for the templates module. |
135
- | `workflow/data/templates/template-definition.ts` | `WorkflowTemplate` type and related metadata types. |
136
- | `workflow/data/templates/template-owner.ts` | Default template-owner constant. |
137
- | `workflow/data/templates/vibe-agent.ts` | Built-in Vibe agent workflow template configuration. |
138
- | `workflow/data/workflow-data.ts` | Re-exports for workflow data and templates. |
139
- | `workflow/data/workflow-types.ts` | Types for workflow node structures, edges, and metadata. |
140
- | **workflow / library** | |
141
- | `workflow/lib/mermaid-renderer.ts` | Renders workflow graphs as Mermaid diagrams with multi-level caching. |
142
- | `workflow/lib/workflow-diff.ts` | Computes a human-readable diff between two workflow versions. |
143
- | `workflow/lib/workflow-execution-builders.ts` | Converts raw API execution responses into typed `WorkflowExecution` models. |
144
- | `workflow/lib/workflow-execution-formatters.ts` | Formats execution status codes and timestamps for display. |
145
- | `workflow/lib/workflow-execution-storage.ts` | Fetches workflow execution history from the backend API. |
146
- | `workflow/lib/workflow-execution.types.ts` | Types for workflow executions and run-history records. |
147
- | `workflow/lib/workflow-storage-api.ts` | API client for workflow CRUD, publishing, and scheduling operations. |
148
- | `workflow/lib/workflow-storage-helpers.ts` | Helper utilities for normalising and transforming workflow storage payloads. |
149
- | `workflow/lib/workflow-storage-versioning.ts` | Manages workflow version history and template-synchronisation logic. |
150
- | `workflow/lib/workflow-storage.ts` | Main workflow storage façade: load, save, delete, and list workflows. |
151
- | `workflow/lib/workflow-storage.constants.ts` | Constants shared across workflow storage modules. |
152
- | `workflow/lib/workflow-storage.types.ts` | Types for stored workflow records and API request/response shapes. |
153
- | **workflow / workflow page** | |
154
- | `workflow/pages/workflow/components/settings-tab-content.tsx` | Settings tab: workflow metadata display, version history, and listener controls. |
155
- | `workflow/pages/workflow/components/trace-tab-content.tsx` | Trace tab: renders execution traces using the agent-prism trace viewer. |
156
- | `workflow/pages/workflow/components/workflow-layout.tsx` | Top-level workflow layout composing the tab bar, navigation, and chat bubble. |
157
- | `workflow/pages/workflow/components/workflow-config-sheet.tsx` | Slide-over sheet for editing workflow runtime parameters and tags. |
158
- | `workflow/pages/workflow/components/workflow-config-sheet.utils.ts` | Schema inference and form-data conversion utilities for the config sheet. |
159
- | `workflow/pages/workflow/components/workflow-tab-content.tsx` | Workflow editor tab: React Flow workflow view, publish/schedule controls, and Mermaid preview. |
160
- | `workflow/pages/workflow/handlers/credentials.ts` | Event handlers for credential add, update, delete, and secret-reveal operations. |
161
- | `workflow/pages/workflow/helpers/execution.ts` | Utility functions for normalising execution status values. |
162
- | `workflow/pages/workflow/helpers/trace.ts` | Transforms raw trace data and computes span display metadata. |
163
- | `workflow/pages/workflow/helpers/types.ts` | Shared types for execution and trace data used across workflow helpers/hooks. |
164
- | `workflow/pages/workflow/hooks/controller/build-layout-props.ts` | Assembles the full layout-props object from core, resource, and execution sub-hooks. |
165
- | `workflow/pages/workflow/hooks/controller/use-workflow-controller.ts` | Main controller hook that composes all workflow sub-hooks into a single interface. |
166
- | `workflow/pages/workflow/hooks/controller/use-workflow-core.ts` | Core hook managing metadata, execution, UI, WebSocket, and chat state. |
167
- | `workflow/pages/workflow/hooks/controller/use-workflow-execution-controller.ts` | Handles workflow run triggering, status polling, and trace updates. |
168
- | `workflow/pages/workflow/hooks/controller/use-workflow-lifecycle.ts` | Wires loader and storage-listener hooks into the workflow lifecycle. |
169
- | `workflow/pages/workflow/hooks/controller/use-workflow-resources.ts` | Composes credential management, listener, and auto-save hooks. |
170
- | `workflow/pages/workflow/hooks/execution-log-helpers.ts` | Formats raw execution log lines for display. |
171
- | `workflow/pages/workflow/hooks/execution-node-status.ts` | Derives per-node status indicators from the current execution record. |
172
- | `workflow/pages/workflow/hooks/execution-record-updater.ts` | Logic for merging incremental execution updates into the execution record. |
173
- | `workflow/pages/workflow/hooks/execution-record.ts` | Creates the initial execution record structure when a run starts. |
174
- | `workflow/pages/workflow/hooks/execution-runtime-updates.ts` | Applies real-time runtime updates to the workflow execution state. |
175
- | `workflow/pages/workflow/hooks/use-studio-ui-state.ts` | Manages active-tab and sidebar-visibility UI state for the workflow page. |
176
- | `workflow/pages/workflow/hooks/use-execution-trace.ts` | Hook that fetches and stores the execution trace for the current run. |
177
- | `workflow/pages/workflow/hooks/use-execution-updates.ts` | Subscribes to WebSocket execution events and forwards them to state. |
178
- | `workflow/pages/workflow/hooks/use-pause-workflow.ts` | Hook exposing a pause action for an in-progress workflow execution. |
179
- | `workflow/pages/workflow/hooks/use-workflow-chat.ts` | Manages the workflow-specific ChatKit session lifecycle. |
180
- | `workflow/pages/workflow/hooks/use-workflow-credentials.ts` | Hook for loading and mutating workflow-scoped credentials. |
181
- | `workflow/pages/workflow/hooks/use-workflow-execution-state.ts` | Central state container for the current workflow execution. |
182
- | `workflow/pages/workflow/hooks/use-workflow-listeners.ts` | Manages workflow event listeners (webhooks / triggers). |
183
- | `workflow/pages/workflow/hooks/use-workflow-loader.ts` | Loads workflow metadata, definition, and execution history on mount. |
184
- | `workflow/pages/workflow/hooks/use-workflow-metadata-state.ts` | State and mutators for workflow name, description, tags, and version info. |
185
- | `workflow/pages/workflow/hooks/use-workflow-saver.ts` | Auto-saves workflow changes on a debounced schedule. |
186
- | `workflow/pages/workflow/hooks/use-workflow-storage-listener.ts` | Listens for external (cross-tab / server-push) workflow storage updates. |
187
- | `workflow/pages/workflow/hooks/workflow-runner-websocket.ts` | Creates and configures the WebSocket connection for live execution updates. |
188
- | `workflow/pages/workflow.tsx` | Top-level workflow page page that integrates the layout with the controller hook. |
189
- | **workflow / gallery page** | |
190
- | `workflow/pages/workflow-gallery/types.ts` | Types for gallery tab identifiers and gallery component state. |
191
- | `workflow/pages/workflow-gallery/use-workflow-gallery-actions.ts` | Gallery action handlers: import workflow, delete workflow, export workflow. |
192
- | `workflow/pages/workflow-gallery/use-workflow-gallery-state.ts` | Hook managing gallery state: workflow list, search query, and active tab. |
193
- | `workflow/pages/workflow-gallery/use-workflow-gallery.ts` | Composed hook combining gallery state and action hooks. |
194
- | `workflow/pages/workflow-gallery/workflow-card-size.ts` | CSS utility class for the workflow card aspect-ratio. |
195
- | `workflow/pages/workflow-gallery/workflow-card.tsx` | Workflow card component with open, use-template, export, and delete actions. |
196
- | `workflow/pages/workflow-gallery/workflow-gallery-tabs.tsx` | Tab bar switching between user workflows and templates, with a search input. |
197
- | `workflow/pages/workflow-gallery.tsx` | Main workflow gallery page. |
198
- | **workflow / types** | |
199
- | `workflow/types/credential-vault.ts` | Types for the credential vault: access-level enum, health-status enum, input/output shapes. |
@@ -1,51 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { Loader2 } from "lucide-react";
3
- import { startOidcLogin } from "@features/auth/lib/oidc-client";
4
-
5
- interface AutoLoginProps {
6
- redirectTo?: string;
7
- invitation?: string;
8
- organization?: string;
9
- organizationName?: string;
10
- loginHint?: string;
11
- screenHint?: string;
12
- }
13
-
14
- export default function AutoLogin({
15
- redirectTo,
16
- invitation,
17
- organization,
18
- organizationName,
19
- loginHint,
20
- screenHint,
21
- }: AutoLoginProps) {
22
- const [error, setError] = useState<string | null>(null);
23
-
24
- useEffect(() => {
25
- startOidcLogin({
26
- redirectTo,
27
- invitation,
28
- organization,
29
- organizationName,
30
- loginHint,
31
- screenHint,
32
- prompt: "login",
33
- }).catch((err: unknown) => {
34
- setError(err instanceof Error ? err.message : "Unable to start login.");
35
- });
36
- }, []); // eslint-disable-line react-hooks/exhaustive-deps
37
-
38
- if (error) {
39
- return (
40
- <div className="flex min-h-screen items-center justify-center">
41
- <p className="text-sm text-destructive">{error}</p>
42
- </div>
43
- );
44
- }
45
-
46
- return (
47
- <div className="flex min-h-screen items-center justify-center">
48
- <Loader2 className="h-6 w-6 animate-spin text-muted-foreground" />
49
- </div>
50
- );
51
- }