@import "shadcn/dist/tailwind.css"; @tailwind base; @tailwind components; @tailwind utilities; html, body, #root { height: 100%; } body { @apply bg-background text-foreground; } .reactflow-wrapper { width: 100%; height: 100vh; } /* Node specific overrides */ .react-flow__node { display: block; overflow: visible; } .react-flow__node .react-flow__handle { box-shadow: 0 0 0 2px rgba(0, 0, 0, 0.06); } .dark .react-flow__node .react-flow__handle { box-shadow: 0 0 0 2px rgba(255, 255, 255, 0.15); } /* Connection validation: valid targets clearly highlighted (from drag start and when hovering), invalid dimmed while connecting */ .react-flow__handle.react-flow__handle-connecting.react-flow__handle-valid, .react-flow__handle.connection-valid-target { background: hsl(var(--primary)) !important; color: hsl(var(--primary-foreground)); box-shadow: 0 0 0 3px hsl(var(--primary)), 0 0 12px 2px hsl(var(--primary) / 0.5) !important; opacity: 1 !important; } .react-flow__handle.react-flow__handle-connecting.react-flow__handle-valid svg, .react-flow__handle.connection-valid-target svg { color: inherit; } .dark .react-flow__handle.react-flow__handle-connecting.react-flow__handle-valid, .dark .react-flow__handle.connection-valid-target { background: hsl(var(--primary)) !important; box-shadow: 0 0 0 3px hsl(var(--primary)), 0 0 14px 4px hsl(var(--primary) / 0.6) !important; } .react-flow__handle.react-flow__handle-connecting:not(.react-flow__handle-valid):not(.connection-valid-target), .react-flow__handle.connection-invalid-target { opacity: 0.25 !important; pointer-events: none; } /* Animated React Flow edges: thicker stroke + path animation */ .react-flow__edge path.animated-edge-path, .animated-edge-path { stroke-width: 4; stroke: hsl(var(--foreground) / 0.6); fill: none; stroke-dasharray: 8 6; animation: edge-flow 0.6s linear infinite; } @keyframes edge-flow { from { stroke-dashoffset: 14; } to { stroke-dashoffset: 0; } } /* Resize control: snappy drag, no transition or selection delay */ .react-flow__resize-control.bottom.right { cursor: se-resize; touch-action: none; user-select: none; } .react-flow__resize-control.bottom.right, .react-flow__resize-control.bottom.right * { transition: none; } /* Small helper for monospace pre output */ pre { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, 'Roboto Mono', 'Courier New', monospace; } @layer base { :root { --background: 0 0% 100%; --foreground: 0 0% 3.9%; --card: 0 0% 100%; --card-foreground: 0 0% 3.9%; --popover: 0 0% 100%; --popover-foreground: 0 0% 3.9%; --primary: 0 0% 9%; --primary-foreground: 0 0% 98%; --secondary: 0 0% 96.1%; --secondary-foreground: 0 0% 9%; --muted: 0 0% 96.1%; --muted-foreground: 0 0% 45.1%; --accent: 0 0% 96.1%; --accent-foreground: 0 0% 9%; --destructive: 0 84.2% 60.2%; --destructive-foreground: 0 0% 98%; --border: 0 0% 89.8%; --input: 0 0% 89.8%; --ring: 0 0% 3.9%; --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%; --radius: 0.5rem; } .dark { --background: 0 0% 3.9%; --foreground: 0 0% 98%; --card: 0 0% 3.9%; --card-foreground: 0 0% 98%; --popover: 0 0% 3.9%; --popover-foreground: 0 0% 98%; --primary: 0 0% 98%; --primary-foreground: 0 0% 9%; --secondary: 0 0% 14.9%; --secondary-foreground: 0 0% 98%; --muted: 0 0% 14.9%; --muted-foreground: 0 0% 63.9%; --accent: 0 0% 14.9%; --accent-foreground: 0 0% 98%; --destructive: 0 62.8% 30.6%; --destructive-foreground: 0 0% 98%; --border: 0 0% 14.9%; --input: 0 0% 14.9%; --ring: 0 0% 83.1%; --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%; } }