orcheo-studio 0.24.5 → 0.24.7

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 (90) hide show
  1. package/.bumpversion.cfg +1 -1
  2. package/dist/assets/{arc-C-7b0zH4.js → arc-D2-yXHYr.js} +1 -1
  3. package/dist/assets/{architectureDiagram-VXUJARFQ-Ciy8lV6J.js → architectureDiagram-VXUJARFQ-T90TGA7h.js} +1 -1
  4. package/dist/assets/{blockDiagram-VD42YOAC-dC88adQ_.js → blockDiagram-VD42YOAC-DD-sctie.js} +1 -1
  5. package/dist/assets/{c4Diagram-YG6GDRKO-BiHVvXEu.js → c4Diagram-YG6GDRKO-CMFh9ow5.js} +1 -1
  6. package/dist/assets/channel-BHDMf1UK.js +1 -0
  7. package/dist/assets/{chunk-4BX2VUAB-C6V7Huup.js → chunk-4BX2VUAB-CxEXc54f.js} +1 -1
  8. package/dist/assets/{chunk-55IACEB6-DRmZnlbz.js → chunk-55IACEB6-Cu79bwG9.js} +1 -1
  9. package/dist/assets/{chunk-B4BG7PRW-DwV5xRJr.js → chunk-B4BG7PRW-B9kTs9bC.js} +1 -1
  10. package/dist/assets/{chunk-DI55MBZ5-BHsUZ0IJ.js → chunk-DI55MBZ5-C4vlj7YJ.js} +1 -1
  11. package/dist/assets/{chunk-FMBD7UC4-6Q-Lz0AM.js → chunk-FMBD7UC4-BAbI4xA2.js} +1 -1
  12. package/dist/assets/{chunk-QN33PNHL-BFy_ml8O.js → chunk-QN33PNHL-Byawnjwi.js} +1 -1
  13. package/dist/assets/{chunk-QZHKN3VN-C1fN91FN.js → chunk-QZHKN3VN-X9swQQ1H.js} +1 -1
  14. package/dist/assets/{chunk-TZMSLE5B-FLRSQ_Fi.js → chunk-TZMSLE5B-qdHYq1mZ.js} +1 -1
  15. package/dist/assets/classDiagram-2ON5EDUG-CmzZyWnG.js +1 -0
  16. package/dist/assets/classDiagram-v2-WZHVMYZB-CmzZyWnG.js +1 -0
  17. package/dist/assets/clone-BCqfTdPh.js +1 -0
  18. package/dist/assets/{cose-bilkent-S5V4N54A-BSWP1X1D.js → cose-bilkent-S5V4N54A-DxP3F1r-.js} +1 -1
  19. package/dist/assets/{dagre-6UL2VRFP-CYoZFlcz.js → dagre-6UL2VRFP-JZzCnaiy.js} +1 -1
  20. package/dist/assets/{diagram-PSM6KHXK-B8RGX0YL.js → diagram-PSM6KHXK-xDDV3S5Y.js} +1 -1
  21. package/dist/assets/{diagram-QEK2KX5R-ChWXJ8p_.js → diagram-QEK2KX5R-GQ6mbBr_.js} +1 -1
  22. package/dist/assets/{diagram-S2PKOQOG-Dwic0Fjn.js → diagram-S2PKOQOG-CuoOnnN6.js} +1 -1
  23. package/dist/assets/{erDiagram-Q2GNP2WA-0NSDB0DX.js → erDiagram-Q2GNP2WA-CFMLhasi.js} +1 -1
  24. package/dist/assets/{flowDiagram-NV44I4VS-DEoGWs9L.js → flowDiagram-NV44I4VS-Dfz2XZo7.js} +1 -1
  25. package/dist/assets/{ganttDiagram-JELNMOA3-DqzV4S6l.js → ganttDiagram-JELNMOA3-Bv566-v-.js} +1 -1
  26. package/dist/assets/{gitGraphDiagram-V2S2FVAM-B-EIQM_H.js → gitGraphDiagram-V2S2FVAM-Bp0dgH1E.js} +1 -1
  27. package/dist/assets/{graph-Ha1DTJNG.js → graph-Dkgmy-o1.js} +1 -1
  28. package/dist/assets/index-BoHYiVT1.js +810 -0
  29. package/dist/assets/index-CES1mKJf.css +1 -0
  30. package/dist/assets/{infoDiagram-HS3SLOUP-C4_vpEkn.js → infoDiagram-HS3SLOUP-CoZX6U-w.js} +1 -1
  31. package/dist/assets/{isUndefined-DkuoqItu.js → isUndefined-DFmulv-o.js} +1 -1
  32. package/dist/assets/{journeyDiagram-XKPGCS4Q-BxY4e6OZ.js → journeyDiagram-XKPGCS4Q-CI7nMgKu.js} +1 -1
  33. package/dist/assets/{kanban-definition-3W4ZIXB7-BTX3_Q7O.js → kanban-definition-3W4ZIXB7-CyVNs44-.js} +1 -1
  34. package/dist/assets/{layout-Dt1W0fl0.js → layout-DZqvH5JV.js} +1 -1
  35. package/dist/assets/{linear-CjywSMUX.js → linear-CiLQWbi5.js} +1 -1
  36. package/dist/assets/{min-Dblq6bty.js → min-CmXn2PCy.js} +1 -1
  37. package/dist/assets/{mindmap-definition-VGOIOE7T-C5P7bAFm.js → mindmap-definition-VGOIOE7T-B_F2Nu7b.js} +1 -1
  38. package/dist/assets/{pieDiagram-ADFJNKIX-BSMylwok.js → pieDiagram-ADFJNKIX-BJvzYaii.js} +1 -1
  39. package/dist/assets/{quadrantDiagram-AYHSOK5B-C74B7bqa.js → quadrantDiagram-AYHSOK5B-Cqk76fvz.js} +1 -1
  40. package/dist/assets/{requirementDiagram-UZGBJVZJ-CvPzL8Le.js → requirementDiagram-UZGBJVZJ-vGfLRbYk.js} +1 -1
  41. package/dist/assets/{sankeyDiagram-TZEHDZUN-BFHm6g6t.js → sankeyDiagram-TZEHDZUN-CregXq64.js} +1 -1
  42. package/dist/assets/{sequenceDiagram-WL72ISMW-e74mJ0xk.js → sequenceDiagram-WL72ISMW-DNrzmFke.js} +1 -1
  43. package/dist/assets/{stateDiagram-FKZM4ZOC-VLQxNVA7.js → stateDiagram-FKZM4ZOC-gdr8ZncR.js} +1 -1
  44. package/dist/assets/stateDiagram-v2-4FDKWEC3-BbOMPcrN.js +1 -0
  45. package/dist/assets/{timeline-definition-IT6M3QCI-oveNP_QD.js → timeline-definition-IT6M3QCI-CdtbG32P.js} +1 -1
  46. package/dist/assets/{treemap-GDKQZRPO-Cowimd29.js → treemap-GDKQZRPO-uMGJkzE9.js} +1 -1
  47. package/dist/assets/{xychartDiagram-PRI3JC2R-CP9Fm_aO.js → xychartDiagram-PRI3JC2R-BsBFf9PQ.js} +1 -1
  48. package/dist/favicon.ico +0 -0
  49. package/dist/index.html +8 -2
  50. package/dist/orcheo-mark.png +0 -0
  51. package/index.html +6 -0
  52. package/package.json +1 -1
  53. package/public/favicon.ico +0 -0
  54. package/public/orcheo-mark.png +0 -0
  55. package/src/design-system/ui/button.tsx +2 -2
  56. package/src/features/account/components/settings/appearance-settings-tab.tsx +1 -1
  57. package/src/features/account/pages/profile/components/profile-general-tab.tsx +1 -1
  58. package/src/features/auth/pages/login.tsx +1 -1
  59. package/src/features/auth/pages/verify.tsx +1 -1
  60. package/src/features/chatkit/components/public-chat-error-boundary.tsx +1 -1
  61. package/src/features/chatkit/components/public-chat-widget.tsx +2 -3
  62. package/src/features/chatkit/lib/chatkit-theme.ts +3 -2
  63. package/src/features/chatkit/pages/public-chat.tsx +17 -15
  64. package/src/features/shared/components/top-navigation/studio-brand.tsx +1 -1
  65. package/src/features/shared/components/workspace-bootstrap-gate.tsx +4 -4
  66. package/src/features/workflow/components/dialogs/credential-access-badge.tsx +2 -2
  67. package/src/features/workflow/components/dialogs/credential-status-badge.tsx +2 -2
  68. package/src/features/workflow/components/dialogs/credentials-table.tsx +1 -1
  69. package/src/features/workflow/components/dialogs/update-workflow-dialog.tsx +34 -78
  70. package/src/features/workflow/components/dialogs/upload-workflow-dialog.tsx +40 -136
  71. package/src/features/workflow/components/dialogs/workflow-folder-picker.tsx +178 -0
  72. package/src/features/workflow/components/panels/workflow-diff-dialog.tsx +5 -5
  73. package/src/features/workflow/components/panels/workflow-history-table.tsx +3 -4
  74. package/src/features/workflow/components/trace/agent-prism/theme/theme.css +74 -74
  75. package/src/features/workflow/lib/mermaid-renderer.ts +86 -2
  76. package/src/features/workflow/lib/workflow-folder-selection.ts +239 -0
  77. package/src/features/workflow/pages/workflow/components/settings-tab-content.tsx +24 -9
  78. package/src/features/workflow/pages/workflow/components/workflow-tab-content.tsx +8 -5
  79. package/src/features/workflow/pages/workflow-gallery/workflow-card.tsx +16 -16
  80. package/src/index.css +126 -59
  81. package/tailwind.config.js +50 -2
  82. package/dist/assets/channel-pJdT5i-M.js +0 -1
  83. package/dist/assets/classDiagram-2ON5EDUG-CNT-EGNU.js +0 -1
  84. package/dist/assets/classDiagram-v2-WZHVMYZB-CNT-EGNU.js +0 -1
  85. package/dist/assets/clone-BCi0j082.js +0 -1
  86. package/dist/assets/index-DTxvVcXp.js +0 -795
  87. package/dist/assets/index-Df4jFRhd.css +0 -1
  88. package/dist/assets/stateDiagram-v2-4FDKWEC3-Bbpq2t6B.js +0 -1
  89. package/dist/orcheo.png +0 -0
  90. package/public/orcheo.png +0 -0
@@ -34,6 +34,7 @@ import {
34
34
  TooltipProvider,
35
35
  TooltipTrigger,
36
36
  } from "@/design-system/ui/tooltip";
37
+ import { useColorScheme } from "@/hooks/use-color-scheme";
37
38
  import { toast } from "@/hooks/use-toast";
38
39
  import { ConfirmDeleteWorkflowDialog } from "@features/workflow/components/dialogs/confirm-delete-workflow-dialog";
39
40
  import { PublishWorkflowDialog } from "@features/workflow/components/dialogs/publish-workflow-dialog";
@@ -239,7 +240,7 @@ const resolveRunResultBanner = (
239
240
  return {
240
241
  Icon: CheckCircle2,
241
242
  className:
242
- "border-emerald-500/40 bg-emerald-50 text-emerald-700 dark:bg-emerald-950/40 dark:text-emerald-300",
243
+ "border-success/40 bg-success-muted text-success-muted-foreground",
243
244
  message: "Workflow run succeeded. See the full trace on the Trace tab.",
244
245
  };
245
246
  case "failed":
@@ -252,7 +253,7 @@ const resolveRunResultBanner = (
252
253
  return {
253
254
  Icon: AlertTriangle,
254
255
  className:
255
- "border-amber-500/40 bg-amber-50 text-amber-700 dark:bg-amber-950/40 dark:text-amber-300",
256
+ "border-warning/40 bg-warning-muted text-warning-muted-foreground",
256
257
  message:
257
258
  "Workflow run finished with partial results. Check the Trace tab for details.",
258
259
  };
@@ -261,7 +262,7 @@ const resolveRunResultBanner = (
261
262
  return {
262
263
  Icon: AlertTriangle,
263
264
  className:
264
- "border-amber-500/40 bg-amber-50 text-amber-700 dark:bg-amber-950/40 dark:text-amber-300",
265
+ "border-warning/40 bg-warning-muted text-warning-muted-foreground",
265
266
  message:
266
267
  "Workflow run ended without a final status. Check the Trace tab for the latest status.",
267
268
  };
@@ -289,6 +290,7 @@ export function WorkflowTabContent({
289
290
  initialShareUrl,
290
291
  missingCredentials = [],
291
292
  }: WorkflowTabContentProps) {
293
+ const colorScheme = useColorScheme();
292
294
  const navigate = useNavigate();
293
295
  const uploadsAllowed = useUploadsAllowed();
294
296
  const latestVersion = versions.at(-1);
@@ -707,7 +709,7 @@ export function WorkflowTabContent({
707
709
  return (
708
710
  <>
709
711
  <div className="flex min-h-0 flex-1 flex-col gap-4 p-4">
710
- <div className="flex items-center justify-between border-b pb-3">
712
+ <div className="flex items-center justify-between pb-3">
711
713
  <div>
712
714
  <h2 className="text-lg font-semibold">
713
715
  {workflowName || "Workflow"}
@@ -915,7 +917,7 @@ export function WorkflowTabContent({
915
917
 
916
918
  {latestVersion && mermaidSource && !diagramError && (
917
919
  <div className="min-h-0 flex flex-1 flex-col">
918
- <div className="min-h-0 flex-1 overflow-hidden">
920
+ <div className="dot-grid min-h-0 flex-1 overflow-hidden rounded-xl border border-border bg-muted/30">
919
921
  {diagramNodes.length > 0 ? (
920
922
  <ReactFlow
921
923
  key={`${latestVersion.id}-mermaid-svg`}
@@ -929,6 +931,7 @@ export function WorkflowTabContent({
929
931
  nodesConnectable={false}
930
932
  elementsSelectable={false}
931
933
  zoomOnDoubleClick={false}
934
+ colorMode={colorScheme}
932
935
  className="h-full w-full"
933
936
  proOptions={{ hideAttribution: true }}
934
937
  style={{ background: "transparent" }}
@@ -213,7 +213,7 @@ export const WorkflowCard = ({
213
213
  <>
214
214
  <Card
215
215
  className={cn(
216
- "flex w-full flex-col overflow-hidden border-border/70 bg-card text-card-foreground shadow-[0_16px_48px_rgba(15,23,42,0.08)] transition-transform duration-200 hover:-translate-y-1 dark:shadow-[0_16px_48px_rgba(0,0,0,0.45)] text-[20px] md:text-[14px]",
216
+ "flex w-full flex-col overflow-hidden border-border/70 bg-card text-card-foreground shadow-[0_16px_48px_rgba(40,30,16,0.1)] transition-transform duration-200 hover:-translate-y-1 dark:shadow-[0_16px_48px_rgba(0,0,0,0.45)] text-[20px] md:text-[14px]",
217
217
  WORKFLOW_GALLERY_CARD_ASPECT_CLASSNAME,
218
218
  isClickable && "cursor-pointer",
219
219
  )}
@@ -223,7 +223,7 @@ export const WorkflowCard = ({
223
223
  role={isClickable ? "button" : undefined}
224
224
  tabIndex={isClickable ? 0 : undefined}
225
225
  >
226
- <CardHeader className="relative flex h-12 items-center justify-center overflow-hidden border-b border-border/70 bg-gradient-to-r from-slate-950 via-slate-900 to-slate-800 px-4 py-0 text-center text-slate-50 dark:border-border/60 dark:from-slate-100 dark:via-slate-50 dark:to-slate-200 dark:text-slate-950">
226
+ <CardHeader className="relative flex h-12 items-center justify-center overflow-hidden border-b border-border/70 bg-gradient-to-r from-stone-950 via-stone-900 to-stone-800 px-4 py-0 text-center text-stone-50 dark:border-border/60 dark:from-stone-100 dark:via-stone-50 dark:to-stone-200 dark:text-stone-950">
227
227
  <div
228
228
  className="absolute inset-0 opacity-25 dark:opacity-40"
229
229
  aria-hidden="true"
@@ -235,7 +235,7 @@ export const WorkflowCard = ({
235
235
  />
236
236
 
237
237
  <div className="relative z-10 flex items-center gap-2">
238
- <span className="font-mono text-[10px] uppercase tracking-[0.22em] text-white/70 dark:text-slate-700">
238
+ <span className="font-mono text-[10px] uppercase tracking-[0.22em] text-white/70 dark:text-stone-700">
239
239
  {headerLabel}
240
240
  </span>
241
241
  </div>
@@ -253,7 +253,7 @@ export const WorkflowCard = ({
253
253
  <Button
254
254
  variant="ghost"
255
255
  size="icon"
256
- className="absolute right-2 top-2 z-10 h-7 w-7 text-white/75 hover:bg-white/10 hover:text-white dark:text-slate-700 dark:hover:bg-slate-950/10 dark:hover:text-slate-950"
256
+ className="absolute right-2 top-2 z-10 h-7 w-7 text-white/75 hover:bg-white/10 hover:text-white dark:text-stone-700 dark:hover:bg-stone-950/10 dark:hover:text-stone-950"
257
257
  onClick={stopPropagation}
258
258
  onPointerDown={stopPropagation}
259
259
  aria-label="Workflow actions"
@@ -290,7 +290,7 @@ export const WorkflowCard = ({
290
290
  <>
291
291
  <DropdownMenuSeparator />
292
292
  <DropdownMenuItem
293
- className="text-red-600"
293
+ className="text-destructive"
294
294
  onSelect={(event) => {
295
295
  event.preventDefault();
296
296
  event.stopPropagation();
@@ -314,31 +314,31 @@ export const WorkflowCard = ({
314
314
  className={cn(
315
315
  "absolute left-0 top-0 flex items-center gap-1 rounded-md border px-2 py-1 shadow-sm",
316
316
  uploadError
317
- ? "border-red-500/40 bg-red-50 text-red-700 dark:bg-red-950/40 dark:text-red-300"
318
- : "border-border/70 bg-muted/60 text-muted-foreground dark:bg-slate-950/20",
317
+ ? "border-destructive/40 bg-destructive-muted text-destructive-muted-foreground"
318
+ : "border-border/70 bg-muted/60 text-muted-foreground dark:bg-background/30",
319
319
  )}
320
320
  >
321
321
  <span
322
322
  className={cn(
323
323
  "h-1.5 w-1.5 rounded-full",
324
324
  uploadError
325
- ? "bg-red-600 shadow-[0_0_6px_rgba(220,38,38,0.45)] dark:bg-red-300"
326
- : "bg-slate-800 shadow-[0_0_6px_rgba(15,23,42,0.32)] dark:bg-slate-200 dark:shadow-[0_0_6px_rgba(226,232,240,0.28)]",
325
+ ? "bg-destructive shadow-[0_0_6px_hsl(var(--destructive)/0.5)]"
326
+ : "bg-foreground shadow-[0_0_6px_hsl(var(--foreground)/0.35)]",
327
327
  )}
328
328
  />
329
329
  <span
330
330
  className={cn(
331
331
  "font-mono text-[9px] font-bold uppercase tracking-[0.1em]",
332
332
  uploadError
333
- ? "text-red-700 dark:text-red-300"
334
- : "text-slate-700 dark:text-slate-300",
333
+ ? "text-destructive-muted-foreground"
334
+ : "text-muted-foreground",
335
335
  )}
336
336
  >
337
337
  {uploadError ? "Error" : "AI"}
338
338
  </span>
339
339
  </div>
340
340
 
341
- <div className="flex h-[7em] w-[7em] items-center justify-center overflow-hidden rounded-full border-4 border-slate-900 bg-slate-100 shadow-[0_4px_16px_rgba(15,23,42,0.18)] dark:border-slate-100 dark:bg-slate-800 dark:shadow-[0_4px_16px_rgba(0,0,0,0.35)]">
341
+ <div className="flex h-[7em] w-[7em] items-center justify-center overflow-hidden rounded-full border-4 border-primary bg-muted shadow-[0_4px_16px_rgba(248,120,37,0.24)] dark:shadow-[0_4px_16px_rgba(0,0,0,0.35)]">
342
342
  <img
343
343
  src={avatarUrl}
344
344
  alt={workflow.name}
@@ -354,7 +354,7 @@ export const WorkflowCard = ({
354
354
  <Button
355
355
  variant="outline"
356
356
  size="icon"
357
- className="absolute right-10 top-0 h-8 w-8 border-emerald-500/40 bg-emerald-50 text-emerald-700 hover:bg-emerald-100 dark:bg-emerald-950/40 dark:text-emerald-300 dark:hover:bg-emerald-900/60"
357
+ className="absolute right-10 top-0 h-8 w-8 border-success/40 bg-success-muted text-success-muted-foreground hover:bg-success/20"
358
358
  aria-label={`Update ${workflow.name} to candidate version ${candidateUpdate.latestVersion}`}
359
359
  data-card-action="true"
360
360
  onClick={(event) => {
@@ -376,7 +376,7 @@ export const WorkflowCard = ({
376
376
  <p>{candidateUpdate.latestSummary}</p>
377
377
  ) : null}
378
378
  {candidateUpdate.firstMigration ? (
379
- <p className="text-amber-600 dark:text-amber-300">
379
+ <p className="text-warning-muted-foreground">
380
380
  {candidateUpdate.firstMigration}
381
381
  </p>
382
382
  ) : null}
@@ -490,7 +490,7 @@ export const WorkflowCard = ({
490
490
  </DialogHeader>
491
491
 
492
492
  {candidateUpdate.isMajor ? (
493
- <div className="rounded-md border border-amber-500/50 bg-amber-50 px-3 py-2 text-sm text-amber-900 dark:bg-amber-950/30 dark:text-amber-200">
493
+ <div className="rounded-md border border-warning/50 bg-warning-muted px-3 py-2 text-sm text-warning-muted-foreground">
494
494
  This is a major candidate update. Review migration notes before
495
495
  applying it to this colleague.
496
496
  </div>
@@ -508,7 +508,7 @@ export const WorkflowCard = ({
508
508
  </div>
509
509
  <p className="mt-1 text-muted-foreground">{note.summary}</p>
510
510
  {note.migration ? (
511
- <p className="mt-2 text-amber-700 dark:text-amber-300">
511
+ <p className="mt-2 text-warning-muted-foreground">
512
512
  {note.migration}
513
513
  </p>
514
514
  ) : null}
package/src/index.css CHANGED
@@ -2,60 +2,98 @@
2
2
  @tailwind components;
3
3
  @tailwind utilities;
4
4
 
5
+ /*
6
+ * Theme derived from the Orcheo design system (orcheo-design-system/tokens/).
7
+ * Warm circuit-orchestration palette: Orcheo orange primary, warm ink neutral
8
+ * ramp (never cool/blue gray), parchment page background, warm semantic hues.
9
+ * Values are HSL triplets of the design-system hex tokens.
10
+ */
5
11
  @layer base {
6
12
  :root {
7
- --background: 0 0% 100%;
8
- --foreground: 240 10% 3.9%;
9
- --card: 0 0% 100%;
10
- --card-foreground: 240 10% 3.9%;
13
+ --background: 45 33% 95%; /* ink-50: warm off-white page */
14
+ --foreground: 43 9% 15%; /* ink-800: body text */
15
+ --card: 0 0% 100%; /* white raised surfaces */
16
+ --card-foreground: 43 9% 15%;
11
17
  --popover: 0 0% 100%;
12
- --popover-foreground: 240 10% 3.9%;
13
- --primary: 240 5.9% 10%;
14
- --primary-foreground: 0 0% 98%;
15
- --secondary: 240 4.8% 95.9%;
16
- --secondary-foreground: 240 5.9% 10%;
17
- --muted: 240 4.8% 95.9%;
18
- --muted-foreground: 240 3.8% 46.1%;
19
- --accent: 240 4.8% 95.9%;
20
- --accent-foreground: 240 5.9% 10%;
21
- --destructive: 0 84.2% 60.2%;
22
- --destructive-foreground: 0 0% 98%;
23
- --border: 240 5.9% 90%;
24
- --input: 240 5.9% 90%;
25
- --ring: 240 5.9% 10%;
26
- --radius: 0.5rem;
27
- --chart-1: 12 76% 61%;
28
- --chart-2: 173 58% 39%;
29
- --chart-3: 197 37% 24%;
30
- --chart-4: 43 74% 66%;
31
- --chart-5: 27 87% 67%;
18
+ --popover-foreground: 43 9% 15%;
19
+ --primary: 24 94% 56%; /* orange-500: Orcheo orange */
20
+ --primary-foreground: 0 0% 100%;
21
+ --primary-hover: 22 80% 50%; /* orange-600 */
22
+ --primary-active: 21 83% 41%; /* orange-700 */
23
+ --secondary: 43 28% 90%; /* ink-100 */
24
+ --secondary-foreground: 45 8% 9%; /* ink-900 */
25
+ --muted: 43 28% 90%; /* ink-100 */
26
+ --muted-foreground: 42 8% 32%; /* ink-600 */
27
+ --accent: 43 28% 90%; /* ink-100: faint warm hover tint */
28
+ --accent-foreground: 45 8% 9%;
29
+ --destructive: 9 69% 48%; /* red-500: warm red */
30
+ --destructive-foreground: 0 0% 100%;
31
+ --destructive-muted: 13 80% 92%; /* red-100 */
32
+ --destructive-muted-foreground: 10 75% 39%; /* red-600 */
33
+ --success: 147 46% 33%; /* green-500: forest green */
34
+ --success-foreground: 0 0% 100%;
35
+ --success-muted: 146 32% 91%; /* green-100 */
36
+ --success-muted-foreground: 147 48% 27%; /* green-600 */
37
+ --warning: 41 82% 47%; /* amber-500: ochre amber */
38
+ --warning-foreground: 45 8% 9%;
39
+ --warning-muted: 43 81% 90%; /* amber-100 */
40
+ --warning-muted-foreground: 40 84% 39%; /* amber-600 */
41
+ --info: 207 42% 42%; /* blue-500: muted slate blue */
42
+ --info-foreground: 0 0% 100%;
43
+ --info-muted: 205 42% 92%; /* blue-100 */
44
+ --info-muted-foreground: 207 43% 33%; /* blue-600 */
45
+ --border: 42 22% 82%; /* ink-200 */
46
+ --input: 42 16% 71%; /* ink-300 */
47
+ --ring: 26 93% 61%; /* orange-400 focus ring */
48
+ --radius: 0.875rem; /* 14px cards; md maps to 10px controls */
49
+ --chart-1: 24 94% 56%; /* orange-500 */
50
+ --chart-2: 147 46% 33%; /* green-500 */
51
+ --chart-3: 207 42% 42%; /* blue-500 */
52
+ --chart-4: 41 82% 47%; /* amber-500 */
53
+ --chart-5: 34 45% 55%; /* tan-500 */
32
54
  }
33
55
 
34
56
  .dark {
35
- --background: 240 10% 3.9%;
36
- --foreground: 0 0% 98%;
37
- --card: 240 10% 3.9%;
38
- --card-foreground: 0 0% 98%;
39
- --popover: 240 10% 3.9%;
40
- --popover-foreground: 0 0% 98%;
41
- --primary: 0 0% 98%;
42
- --primary-foreground: 240 5.9% 10%;
43
- --secondary: 240 3.7% 15.9%;
44
- --secondary-foreground: 0 0% 98%;
45
- --muted: 240 3.7% 15.9%;
46
- --muted-foreground: 240 5% 64.9%;
47
- --accent: 240 3.7% 15.9%;
48
- --accent-foreground: 0 0% 98%;
49
- --destructive: 0 62.8% 30.6%;
50
- --destructive-foreground: 0 0% 98%;
51
- --border: 240 3.7% 15.9%;
52
- --input: 240 3.7% 15.9%;
53
- --ring: 240 4.9% 83.9%;
54
- --chart-1: 220 70% 50%;
55
- --chart-2: 160 60% 45%;
56
- --chart-3: 30 80% 55%;
57
- --chart-4: 280 65% 60%;
58
- --chart-5: 340 75% 55%;
57
+ --background: 60 8% 5%; /* ink-950 */
58
+ --foreground: 43 28% 90%; /* ink-100 */
59
+ --card: 45 8% 9%; /* ink-900 */
60
+ --card-foreground: 43 28% 90%;
61
+ --popover: 45 8% 9%;
62
+ --popover-foreground: 43 28% 90%;
63
+ --primary: 24 94% 56%; /* orange-500 */
64
+ --primary-foreground: 0 0% 100%;
65
+ --primary-hover: 26 93% 61%; /* orange-400: lighten on dark */
66
+ --primary-active: 28 93% 68%; /* orange-300 */
67
+ --secondary: 43 9% 15%; /* ink-800 */
68
+ --secondary-foreground: 43 28% 90%;
69
+ --muted: 43 9% 15%; /* ink-800 */
70
+ --muted-foreground: 41 10% 56%; /* ink-400 */
71
+ --accent: 43 9% 15%; /* ink-800 */
72
+ --accent-foreground: 43 28% 90%;
73
+ --destructive: 9 69% 48%;
74
+ --destructive-foreground: 0 0% 100%;
75
+ --destructive-muted: 10 75% 15%;
76
+ --destructive-muted-foreground: 11 70% 70%;
77
+ --success: 147 46% 33%;
78
+ --success-foreground: 0 0% 100%;
79
+ --success-muted: 147 48% 14%;
80
+ --success-muted-foreground: 147 35% 65%;
81
+ --warning: 41 82% 47%;
82
+ --warning-foreground: 60 8% 5%;
83
+ --warning-muted: 40 84% 14%;
84
+ --warning-muted-foreground: 41 70% 65%;
85
+ --info: 207 42% 42%;
86
+ --info-foreground: 0 0% 100%;
87
+ --info-muted: 207 43% 16%;
88
+ --info-muted-foreground: 207 45% 70%;
89
+ --border: 43 9% 15%; /* ink-800 */
90
+ --input: 42 9% 22%; /* ink-700 */
91
+ --ring: 26 93% 61%; /* orange-400 */
92
+ --chart-1: 26 93% 61%; /* orange-400 */
93
+ --chart-2: 147 46% 33%;
94
+ --chart-3: 207 42% 42%;
95
+ --chart-4: 41 82% 47%;
96
+ --chart-5: 34 45% 55%;
59
97
  }
60
98
  }
61
99
 
@@ -64,17 +102,54 @@
64
102
  @apply border-border;
65
103
  }
66
104
  body {
67
- @apply bg-background text-foreground;
105
+ @apply bg-background font-sans text-foreground antialiased;
106
+ }
107
+ h1,
108
+ h2,
109
+ h3,
110
+ h4,
111
+ h5,
112
+ h6 {
113
+ @apply font-display font-semibold tracking-tight;
114
+ }
115
+ ::selection {
116
+ background: hsl(28 92% 80%); /* orange-200 */
117
+ color: hsl(60 8% 5%); /* ink-950 */
118
+ }
119
+ .dark ::selection {
120
+ background: hsl(21 81% 33%); /* orange-800 */
121
+ color: hsl(0 0% 100%);
68
122
  }
69
123
  }
70
124
 
71
125
  @layer components {
126
+ /* Warm dot lattice — the design system's workspace-canvas motif. */
127
+ .dot-grid {
128
+ background-image: radial-gradient(
129
+ hsl(42 22% 82%) 1px,
130
+ transparent 1px
131
+ ); /* ink-200 */
132
+ background-size: 18px 18px;
133
+ }
134
+ .dark .dot-grid {
135
+ background-image: radial-gradient(
136
+ hsl(43 10% 14%) 1px,
137
+ transparent 1px
138
+ ); /* warm ink dot */
139
+ }
140
+
72
141
  .react-flow__controls {
73
- @apply flex flex-col overflow-hidden rounded-xl border border-slate-200/80 bg-white/95 text-slate-700 shadow-lg backdrop-blur-sm;
142
+ --xy-controls-box-shadow: 0 8px 20px hsl(var(--background) / 0.45);
143
+ --xy-controls-button-background-color: hsl(var(--card) / 0.98);
144
+ --xy-controls-button-background-color-hover: hsl(var(--accent));
145
+ --xy-controls-button-border-color: hsl(var(--border) / 0.9);
146
+ --xy-controls-button-color: hsl(var(--card-foreground));
147
+ --xy-controls-button-color-hover: hsl(var(--accent-foreground));
148
+ @apply flex flex-col overflow-hidden rounded-xl border border-border bg-card/95 text-card-foreground shadow-lg backdrop-blur-sm;
74
149
  }
75
150
 
76
151
  .react-flow__controls-button {
77
- @apply flex h-10 w-10 items-center justify-center border-b border-slate-200/70 text-slate-700 transition-colors duration-200 hover:bg-slate-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-500/40 focus-visible:ring-offset-2 focus-visible:ring-offset-white;
152
+ @apply flex h-10 w-10 items-center justify-center border-b border-border/70 text-muted-foreground transition-colors duration-200 hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-2 focus-visible:ring-offset-card;
78
153
  }
79
154
 
80
155
  .react-flow__controls-button:last-child {
@@ -84,12 +159,4 @@
84
159
  .react-flow__controls-button svg {
85
160
  @apply text-current;
86
161
  }
87
-
88
- .dark .react-flow__controls {
89
- @apply border-slate-800/80 bg-slate-900/90 text-slate-200 shadow-[0_18px_40px_rgba(0,0,0,0.65)];
90
- }
91
-
92
- .dark .react-flow__controls-button {
93
- @apply border-slate-800/70 text-slate-400 hover:bg-slate-800 focus-visible:ring-slate-300/40 focus-visible:ring-offset-slate-900;
94
- }
95
162
  }
@@ -1,4 +1,5 @@
1
1
  import tailwindcssAnimate from "tailwindcss-animate";
2
+ import defaultTheme from "tailwindcss/defaultTheme";
2
3
 
3
4
  const agentPrismPrefix = "agentprism";
4
5
  const agentPrismTokens = [
@@ -99,10 +100,32 @@ export default {
99
100
  content: ["./main.tsx", "./src/**/*.{js,ts,jsx,tsx}"],
100
101
  theme: {
101
102
  extend: {
103
+ fontFamily: {
104
+ sans: ['"IBM Plex Sans"', ...defaultTheme.fontFamily.sans],
105
+ display: ['"Space Grotesk"', ...defaultTheme.fontFamily.sans],
106
+ mono: ['"IBM Plex Mono"', ...defaultTheme.fontFamily.mono],
107
+ },
108
+ // Orcheo design-system radii: controls 10px, cards 14px, panels 20px.
102
109
  borderRadius: {
110
+ sm: "calc(var(--radius) - 8px)",
111
+ md: "calc(var(--radius) - 4px)",
103
112
  lg: "var(--radius)",
104
- md: "calc(var(--radius) - 2px)",
105
- sm: "calc(var(--radius) - 4px)",
113
+ xl: "calc(var(--radius) + 6px)",
114
+ "2xl": "calc(var(--radius) + 14px)",
115
+ },
116
+ // Warm-tinted shadows (ink/brown alpha, never black-blue).
117
+ boxShadow: {
118
+ xs: "0 1px 2px rgba(40, 30, 16, 0.06)",
119
+ sm: "0 1px 2px rgba(40, 30, 16, 0.06), 0 2px 6px rgba(40, 30, 16, 0.06)",
120
+ DEFAULT:
121
+ "0 1px 2px rgba(40, 30, 16, 0.06), 0 2px 6px rgba(40, 30, 16, 0.06)",
122
+ md: "0 2px 4px rgba(40, 30, 16, 0.06), 0 6px 16px rgba(40, 30, 16, 0.08)",
123
+ lg: "0 4px 8px rgba(40, 30, 16, 0.06), 0 16px 32px rgba(40, 30, 16, 0.12)",
124
+ xl: "0 8px 16px rgba(40, 30, 16, 0.08), 0 28px 56px rgba(40, 30, 16, 0.16)",
125
+ brand: "0 4px 14px rgba(248, 120, 37, 0.32)",
126
+ // Primary-button sheen: faint inset top highlight so orange doesn't read flat.
127
+ "primary-sheen":
128
+ "inset 0 1px 0 rgba(255, 255, 255, 0.16), 0 1px 2px rgba(40, 30, 16, 0.06)",
106
129
  },
107
130
  colors: {
108
131
  background: "hsl(var(--background))",
@@ -118,6 +141,8 @@ export default {
118
141
  primary: {
119
142
  DEFAULT: "hsl(var(--primary))",
120
143
  foreground: "hsl(var(--primary-foreground))",
144
+ hover: "hsl(var(--primary-hover))",
145
+ active: "hsl(var(--primary-active))",
121
146
  },
122
147
  secondary: {
123
148
  DEFAULT: "hsl(var(--secondary))",
@@ -134,10 +159,33 @@ export default {
134
159
  destructive: {
135
160
  DEFAULT: "hsl(var(--destructive))",
136
161
  foreground: "hsl(var(--destructive-foreground))",
162
+ muted: "hsl(var(--destructive-muted))",
163
+ "muted-foreground": "hsl(var(--destructive-muted-foreground))",
164
+ },
165
+ success: {
166
+ DEFAULT: "hsl(var(--success))",
167
+ foreground: "hsl(var(--success-foreground))",
168
+ muted: "hsl(var(--success-muted))",
169
+ "muted-foreground": "hsl(var(--success-muted-foreground))",
170
+ },
171
+ warning: {
172
+ DEFAULT: "hsl(var(--warning))",
173
+ foreground: "hsl(var(--warning-foreground))",
174
+ muted: "hsl(var(--warning-muted))",
175
+ "muted-foreground": "hsl(var(--warning-muted-foreground))",
176
+ },
177
+ info: {
178
+ DEFAULT: "hsl(var(--info))",
179
+ foreground: "hsl(var(--info-foreground))",
180
+ muted: "hsl(var(--info-muted))",
181
+ "muted-foreground": "hsl(var(--info-muted-foreground))",
137
182
  },
138
183
  border: "hsl(var(--border))",
139
184
  input: "hsl(var(--input))",
140
185
  ring: "hsl(var(--ring))",
186
+ // Orcheo brand accents (orcheo-design-system: brand-cream, brand-tan).
187
+ cream: "#f6f5d4",
188
+ tan: "#e0c090",
141
189
  chart: {
142
190
  1: "hsl(var(--chart-1))",
143
191
  2: "hsl(var(--chart-2))",
@@ -1 +0,0 @@
1
- import{ap as o,aq as n}from"./index-DTxvVcXp.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-DwV5xRJr.js";import{_ as i}from"./index-DTxvVcXp.js";import"./chunk-FMBD7UC4-6Q-Lz0AM.js";import"./chunk-55IACEB6-DRmZnlbz.js";import"./chunk-QN33PNHL-BFy_ml8O.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-B4BG7PRW-DwV5xRJr.js";import{_ as i}from"./index-DTxvVcXp.js";import"./chunk-FMBD7UC4-6Q-Lz0AM.js";import"./chunk-55IACEB6-DRmZnlbz.js";import"./chunk-QN33PNHL-BFy_ml8O.js";var p={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{p as diagram};
@@ -1 +0,0 @@
1
- import{ay as r}from"./index-DTxvVcXp.js";var a=4;function n(o){return r(o,a)}export{n as c};