Skip to content

Commit 780c05d

Browse files
style(ui): align screens with design-system anti-boilerplate
Replace raw zinc/indigo/violet Tailwind with semantic tokens. Remove rounded-full from builder toolbar, badges, and icon buttons; keep flow handles circular. Use pointer-scoped hover classes for cards, bento reveals, and canvas node chrome. Auth/canvas fallback gradients use background and primary mix. Co-authored-by: Adrianno Esnarriaga <adriannoes@users.noreply.github.com>
1 parent 40ade2c commit 780c05d

20 files changed

Lines changed: 123 additions & 123 deletions

src/app/login/login-client.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function LoginClient() {
1515
<div className="bg-background relative flex min-h-screen items-center justify-center overflow-hidden p-4">
1616
<Suspense
1717
fallback={
18-
<div className="absolute inset-0 bg-gradient-to-br from-zinc-950 via-indigo-950/20 to-zinc-950" />
18+
<div className="from-background via-primary/10 to-background absolute inset-0 bg-gradient-to-br" />
1919
}
2020
>
2121
<CanvasBg />

src/app/signup/signup-client.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export function SignupClient() {
1515
<div className="bg-background relative flex min-h-screen items-center justify-center overflow-hidden p-4">
1616
<Suspense
1717
fallback={
18-
<div className="absolute inset-0 bg-gradient-to-br from-zinc-950 via-indigo-950/20 to-zinc-950" />
18+
<div className="from-background via-primary/10 to-background absolute inset-0 bg-gradient-to-br" />
1919
}
2020
>
2121
<CanvasBg />

src/components/agents-dashboard.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,20 @@ export function AgentsDashboard() {
106106
{agents.map((agent) => (
107107
<Card
108108
key={agent.id}
109-
className="group border-border/80 hover:border-primary/20 hover-lift transition-all duration-300"
109+
className="group border-border/80 hover-border-primary-soft hover-lift transition-all duration-300"
110110
>
111111
<CardHeader className="pb-3">
112112
<div className="flex items-start justify-between">
113113
<div className="flex items-center gap-3">
114-
<div className="flex h-10 w-10 items-center justify-center rounded-lg border border-indigo-500/20 bg-indigo-500/10">
115-
<Bot className="h-5 w-5 text-indigo-300" />
114+
<div className="border-primary/20 bg-primary/10 flex h-10 w-10 items-center justify-center rounded-lg border">
115+
<Bot className="text-primary h-5 w-5" />
116116
</div>
117117
<div>
118118
<CardTitle className="text-lg">{agent.name}</CardTitle>
119119
<p className="text-muted-foreground mt-0.5 text-xs">{agent.model}</p>
120120
</div>
121121
</div>
122-
<div className="flex items-center gap-1 opacity-100 transition-opacity duration-300 md:opacity-0 md:group-hover:opacity-100">
122+
<div className="flex items-center gap-1 opacity-100 transition-opacity duration-300 md:opacity-0 md-group-hover-reveal-if-pointer">
123123
<Button variant="ghost" size="icon" asChild title="Run Agent">
124124
<Link href={`/runs?agentId=${agent.id}`}>
125125
<Play className="h-4 w-4" />

src/components/builder/builder-canvas.tsx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -805,12 +805,12 @@ function BuilderCanvasInner() {
805805
<h1 className="truncate text-sm font-semibold tracking-tight">
806806
{workflow?.name || "Untitled Workflow"}
807807
</h1>
808-
<span className="border-border/80 bg-muted/40 text-muted-foreground rounded-full border px-2 py-0.5 text-[10px] font-medium">
808+
<span className="border-border/80 bg-muted/40 text-muted-foreground rounded-md border px-2 py-0.5 text-[10px] font-medium">
809809
v{workflow?.version || 1}
810810
</span>
811811
</div>
812812

813-
<div className="border-border/80 bg-background/70 ml-auto flex max-w-full items-center gap-1.5 overflow-x-auto rounded-full border p-1">
813+
<div className="border-border/80 bg-background/70 ml-auto flex max-w-full items-center gap-1.5 overflow-x-auto rounded-xl border p-1">
814814
<ExportImportDialog
815815
workflowId={workflowId}
816816
onImportSuccess={(newWorkflow) => {
@@ -827,7 +827,7 @@ function BuilderCanvasInner() {
827827
<Button
828828
variant="ghost"
829829
size="icon"
830-
className="hover:bg-accent h-8 w-8 rounded-full"
830+
className="hover:bg-accent h-8 w-8 rounded-md"
831831
onClick={handleUndo}
832832
disabled={!historyStatus?.canUndo}
833833
aria-label="Undo"
@@ -838,7 +838,7 @@ function BuilderCanvasInner() {
838838
<Button
839839
variant="ghost"
840840
size="icon"
841-
className="hover:bg-accent h-8 w-8 rounded-full"
841+
className="hover:bg-accent h-8 w-8 rounded-md"
842842
onClick={handleRedo}
843843
disabled={!historyStatus?.canRedo}
844844
aria-label="Redo"
@@ -850,7 +850,7 @@ function BuilderCanvasInner() {
850850
<Button
851851
variant="ghost"
852852
size="icon"
853-
className="hover:bg-accent h-8 w-8 rounded-full"
853+
className="hover:bg-accent h-8 w-8 rounded-md"
854854
onClick={handleAutoLayout}
855855
title="Auto Layout"
856856
aria-label="Auto Layout"
@@ -860,7 +860,7 @@ function BuilderCanvasInner() {
860860
<Button
861861
variant="ghost"
862862
size="icon"
863-
className="hover:bg-accent h-8 w-8 rounded-full"
863+
className="hover:bg-accent h-8 w-8 rounded-md"
864864
onClick={handleZoomOut}
865865
aria-label="Zoom out"
866866
title="Zoom out"
@@ -876,7 +876,7 @@ function BuilderCanvasInner() {
876876
<Button
877877
variant="ghost"
878878
size="icon"
879-
className="hover:bg-accent h-8 w-8 rounded-full"
879+
className="hover:bg-accent h-8 w-8 rounded-md"
880880
onClick={handleZoomIn}
881881
aria-label="Zoom in"
882882
title="Zoom in"
@@ -886,7 +886,7 @@ function BuilderCanvasInner() {
886886
<Button
887887
variant="ghost"
888888
size="icon"
889-
className="hover:bg-accent h-8 w-8 rounded-full"
889+
className="hover:bg-accent h-8 w-8 rounded-md"
890890
onClick={handleResetView}
891891
aria-label="Fit view"
892892
title="Fit view"
@@ -897,7 +897,7 @@ function BuilderCanvasInner() {
897897
<Button
898898
variant="ghost"
899899
size="icon"
900-
className="hover:bg-accent h-8 w-8 rounded-full"
900+
className="hover:bg-accent h-8 w-8 rounded-md"
901901
onClick={() => setShowVersionHistory(!showVersionHistory)}
902902
aria-label="Version history"
903903
title="Version history"
@@ -907,13 +907,13 @@ function BuilderCanvasInner() {
907907
<Button
908908
variant="outline"
909909
size="sm"
910-
className="ml-1 h-8 gap-2 rounded-full border-indigo-500/20 bg-indigo-500/10 text-indigo-300 hover:bg-indigo-500/20"
910+
className="border-primary/20 bg-primary/10 text-primary hover:bg-primary/20 ml-1 h-8 gap-2 rounded-md"
911911
onClick={() => setShowExecutionMonitor(!showExecutionMonitor)}
912912
>
913913
<Play className="h-3.5 w-3.5" />
914914
{showExecutionMonitor ? "Close" : "Run"}
915915
</Button>
916-
<Button size="sm" className="h-8 gap-2 rounded-full" onClick={handleSaveVersion}>
916+
<Button size="sm" className="h-8 gap-2 rounded-md" onClick={handleSaveVersion}>
917917
<Save className="h-3.5 w-3.5" />
918918
Save
919919
</Button>

src/components/builder/canvas-node.tsx

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -40,57 +40,57 @@ const NODE_COLORS: Record<NodeType, { bg: string; iconBg: string; border: string
4040
{
4141
start: {
4242
bg: "bg-card/95",
43-
iconBg: "bg-indigo-500/10",
43+
iconBg: "bg-primary/10",
4444
border: "border-border/80",
45-
icon: "text-indigo-300",
45+
icon: "text-primary",
4646
},
4747
end: {
4848
bg: "bg-card/95",
49-
iconBg: "bg-violet-500/10",
49+
iconBg: "bg-primary/15",
5050
border: "border-border/80",
51-
icon: "text-violet-300",
51+
icon: "text-primary",
5252
},
5353
agent: {
5454
bg: "bg-card/95",
55-
iconBg: "bg-indigo-400/15",
55+
iconBg: "bg-primary/15",
5656
border: "border-border/80",
57-
icon: "text-indigo-200",
57+
icon: "text-primary",
5858
},
5959
guardrail: {
6060
bg: "bg-card/95",
61-
iconBg: "bg-zinc-500/10",
61+
iconBg: "bg-muted/50",
6262
border: "border-border/80",
63-
icon: "text-zinc-300",
63+
icon: "text-muted-foreground",
6464
},
6565
condition: {
6666
bg: "bg-card/95",
67-
iconBg: "bg-violet-500/10",
67+
iconBg: "bg-primary/15",
6868
border: "border-border/80",
69-
icon: "text-violet-300",
69+
icon: "text-primary",
7070
},
7171
mcp: {
7272
bg: "bg-card/95",
73-
iconBg: "bg-violet-400/15",
73+
iconBg: "bg-primary/15",
7474
border: "border-border/80",
75-
icon: "text-violet-200",
75+
icon: "text-primary",
7676
},
7777
"user-approval": {
7878
bg: "bg-card/95",
79-
iconBg: "bg-zinc-500/10",
79+
iconBg: "bg-muted/50",
8080
border: "border-border/80",
81-
icon: "text-zinc-300",
81+
icon: "text-muted-foreground",
8282
},
8383
"file-search": {
8484
bg: "bg-card/95",
85-
iconBg: "bg-indigo-400/15",
85+
iconBg: "bg-primary/15",
8686
border: "border-border/80",
87-
icon: "text-indigo-200",
87+
icon: "text-primary",
8888
},
8989
frame: {
9090
bg: "bg-card/95",
91-
iconBg: "bg-zinc-500/10",
91+
iconBg: "bg-muted/50",
9292
border: "border-border/80",
93-
icon: "text-zinc-300",
93+
icon: "text-muted-foreground",
9494
},
9595
}
9696

@@ -122,7 +122,7 @@ export function CanvasNode({ data, selected, type: nodeTypeProp }: WorkflowNodeP
122122
"border",
123123
colors.bg,
124124
colors.border,
125-
"hover:border-primary/40",
125+
"hover-border-primary-medium",
126126
selected ? "ring-primary/40 z-10 ring-2" : "",
127127
isHighlighted && "ring-primary/60 ring-2",
128128
"cursor-grab active:cursor-grabbing",
@@ -149,15 +149,15 @@ export function CanvasNode({ data, selected, type: nodeTypeProp }: WorkflowNodeP
149149
"relative flex-shrink-0 rounded-xl p-2.5 transition-all duration-500 ease-out",
150150
colors.iconBg,
151151
"ring-border/80 ring-1 ring-inset",
152-
selected ? "scale-105" : "group-hover:scale-105",
152+
selected ? "scale-105" : "group-hover-scale-105-if-pointer",
153153
)}
154154
>
155155
{Icon && (
156156
<Icon
157157
className={cn(
158158
"h-5 w-5 transition-transform duration-500",
159159
colors.icon,
160-
selected ? "scale-110" : "group-hover:scale-110",
160+
selected ? "scale-110" : "group-hover-scale-110-if-pointer",
161161
)}
162162
/>
163163
)}
@@ -184,7 +184,7 @@ export function CanvasNode({ data, selected, type: nodeTypeProp }: WorkflowNodeP
184184
<Button
185185
variant="ghost"
186186
size="icon"
187-
className="nodrag nopan border-border/80 bg-background/80 text-muted-foreground hover:border-destructive hover:bg-destructive/80 h-7 w-7 rounded-full border transition-all duration-200 hover:scale-105 hover:text-white"
187+
className="nodrag nopan border-border/80 bg-background/80 text-muted-foreground hover:border-destructive hover:bg-destructive/80 h-7 w-7 rounded-md border transition-all duration-200 hover-scale-105-if-pointer hover:text-white"
188188
onClick={(e) => {
189189
e.stopPropagation()
190190
handleDelete()
@@ -200,11 +200,11 @@ export function CanvasNode({ data, selected, type: nodeTypeProp }: WorkflowNodeP
200200

201201
{nodeType === "agent" && data?.model && (
202202
<div className="mt-4 flex items-center gap-2 pt-1">
203-
<span className="rounded-full border border-indigo-500/20 bg-indigo-500/10 px-2.5 py-1 text-[11px] font-medium text-indigo-300">
203+
<span className="border-primary/20 bg-primary/10 text-primary rounded-md border px-2.5 py-1 text-[11px] font-medium">
204204
{data.model}
205205
</span>
206206
{data.tools && data.tools.length > 0 && (
207-
<span className="border-border/80 bg-muted/30 text-muted-foreground/80 rounded-full border px-2.5 py-1 text-[11px] font-medium">
207+
<span className="border-border/80 bg-muted/30 text-muted-foreground/80 rounded-md border px-2.5 py-1 text-[11px] font-medium">
208208
{data.tools.length} tool{data.tools.length !== 1 ? "s" : ""}
209209
</span>
210210
)}
@@ -213,7 +213,7 @@ export function CanvasNode({ data, selected, type: nodeTypeProp }: WorkflowNodeP
213213

214214
{nodeType === "guardrail" && data?.guardrailType && (
215215
<div className="mt-4 pt-1">
216-
<span className="inline-block rounded-full border border-zinc-500/20 bg-zinc-500/10 px-2.5 py-1 text-[11px] font-medium text-zinc-300">
216+
<span className="border-border bg-muted/40 text-muted-foreground inline-block rounded-md border px-2.5 py-1 text-[11px] font-medium">
217217
{data.guardrailType}
218218
</span>
219219
</div>

src/components/builder/execution-monitor.tsx

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ function JsonViewer({ data }: { data: unknown }) {
4747
title="Copy JSON"
4848
>
4949
{copied ? (
50-
<CheckCircle2 className="h-3 w-3 text-emerald-500" />
50+
<CheckCircle2 className="text-chart-2 h-3 w-3" />
5151
) : (
5252
<Copy className="h-3 w-3" />
5353
)}
5454
</Button>
55-
<pre className="bg-muted overflow-x-auto rounded p-2 text-xs text-indigo-900 dark:text-indigo-200">
55+
<pre className="bg-muted text-foreground overflow-x-auto rounded p-2 text-xs">
5656
{jsonStr}
5757
</pre>
5858
</div>
@@ -96,30 +96,30 @@ export function ExecutionMonitor({
9696
const getLogIcon = (type: ExecutionLog["type"]) => {
9797
switch (type) {
9898
case "success":
99-
return <CheckCircle2 className="h-4 w-4 text-emerald-500" />
99+
return <CheckCircle2 className="text-chart-2 h-4 w-4" />
100100
case "error":
101-
return <XCircle className="h-4 w-4 text-rose-500" />
101+
return <XCircle className="text-destructive h-4 w-4" />
102102
case "info":
103-
return <ChevronRight className="h-4 w-4 text-indigo-300" />
103+
return <ChevronRight className="text-primary h-4 w-4" />
104104
case "tool-call":
105-
return <Play className="h-4 w-4 text-violet-300" />
105+
return <Play className="text-primary h-4 w-4" />
106106
case "tool-result":
107-
return <CheckCircle2 className="h-4 w-4 text-indigo-300" />
107+
return <CheckCircle2 className="text-primary h-4 w-4" />
108108
}
109109
}
110110

111111
const getStatusBadge = (status: WorkflowExecution["status"]) => {
112112
switch (status) {
113113
case "running":
114114
return (
115-
<div className="flex items-center gap-1.5 rounded border border-violet-500/20 bg-violet-500/10 px-2 py-1 text-xs font-medium text-violet-300">
115+
<div className="border-primary/30 bg-primary/15 text-primary flex items-center gap-1.5 rounded border px-2 py-1 text-xs font-medium">
116116
<Loader2 className="h-3 w-3 animate-spin" />
117117
Running
118118
</div>
119119
)
120120
case "completed":
121121
return (
122-
<div className="flex items-center gap-1.5 rounded border border-indigo-500/20 bg-indigo-500/10 px-2 py-1 text-xs font-medium text-indigo-300">
122+
<div className="border-primary/20 bg-primary/10 text-primary flex items-center gap-1.5 rounded border px-2 py-1 text-xs font-medium">
123123
<CheckCircle2 className="h-3 w-3" />
124124
Completed
125125
</div>
@@ -133,7 +133,7 @@ export function ExecutionMonitor({
133133
)
134134
case "paused":
135135
return (
136-
<div className="flex items-center gap-1.5 rounded border border-violet-500/20 bg-violet-500/10 px-2 py-1 text-xs font-medium text-violet-300">
136+
<div className="border-primary/30 bg-primary/15 text-primary flex items-center gap-1.5 rounded border px-2 py-1 text-xs font-medium">
137137
<Pause className="h-3 w-3" />
138138
Paused
139139
</div>

src/components/builder/node-properties-panel.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ export function NodePropertiesPanel({
105105
variant="outline"
106106
size="icon"
107107
className={cn(
108-
"border-border/80 bg-card text-muted-foreground absolute top-4 -left-4 z-50 h-8 w-8 rounded-full border",
109-
"hover:text-foreground transition-all duration-300 hover:scale-110",
108+
"border-border/80 bg-card text-muted-foreground absolute top-4 -left-4 z-50 h-8 w-8 rounded-md border",
109+
"hover:text-foreground transition-all duration-300 hover-scale-110-if-pointer",
110110
)}
111111
onClick={onToggle}
112112
aria-label={isOpen ? "Close properties panel" : "Open properties panel"}
@@ -310,7 +310,7 @@ export function NodePropertiesPanel({
310310
</>
311311
) : (
312312
<div className="flex flex-1 flex-col items-center justify-center p-6 text-center">
313-
<div className="border-border/80 bg-muted/30 mb-4 rounded-full border p-4">
313+
<div className="border-border/80 bg-muted/30 mb-4 rounded-xl border p-4">
314314
<Settings2 className="text-muted-foreground/40 h-8 w-8" />
315315
</div>
316316
<h3 className="text-foreground mb-1 font-medium tracking-tight">No Node Selected</h3>

0 commit comments

Comments
 (0)