diff --git a/web/src/components/Tasks/TaskCard.tsx b/web/src/components/Tasks/TaskCard.tsx index ea99a4d0..b7812a14 100644 --- a/web/src/components/Tasks/TaskCard.tsx +++ b/web/src/components/Tasks/TaskCard.tsx @@ -15,30 +15,46 @@ export function TaskCard({ task, onStatusChange }: { onClick={() => navigate(`/tasks/${task.id}`)} className="p-4 bg-surface border border-border-subtle rounded-lg hover:border-border transition-colors cursor-pointer" > -
-
-

{task.title}

-
+ {/* On a phone the status select held ~110px against a title that then + had to wrap inside ~200px. It drops to the meta line instead, where + there is room to spare, and the title gets the full card width. + Ordering does it without duplicating anything: + + phone title / meta + controls + ≥ sm title + controls / meta */} +
+

+ {task.title} +

+ +
+ {/* Hidden on a phone: the select sitting beside it already names + the status, and one value is not worth showing twice. */} + - {task.deadline && ( - - {task.deadline} - - )} - {task.updated_at && ( - - {formatTimeAgo(task.updated_at)} - - )} - {task.source && ( - from {task.source} - )} -
+ + {task.deadline && ( + + {task.deadline} + + )} + {task.updated_at && ( + + {formatTimeAgo(task.updated_at)} + + )} + {task.source && ( + from {task.source} + )}
-
e.stopPropagation()}> + +
e.stopPropagation()} + > {task.source_url && (