-
{video.channel_name}
- {date &&
·}
- {date &&
{date}}
+ {/* Channel row */}
+
+ {avatarUrl && (
+

+ )}
+
{video.channel_name}
+ {date && (
+ <>
+
·
+
{date}
+ >
+ )}
+
+
+ {/* Views + badges */}
+
+ {video.view_count > 0 && {formatViews(video.view_count)}}
{video.is_recommended && !calmMode && (
-
+
Discover
)}
{isDormant && !calmMode && (
- zzz
+ zzz
)}
{channelNote && (
@@ -295,17 +302,15 @@ export default function VideoCard({ video, size = "md", onDismiss, variant = "gr
)}
- {/* Description */}
- {video.description ? (
-
+ {/* Description — desktop only, 2 lines max */}
+ {video.description && (
+
{video.description.replace(/\n+/g, " ")}
- ) : (
-
)}
- {/* Actions — fade in on hover */}
-
+ {/* Actions — always visible on mobile, fade on desktop */}
+
{actions}
@@ -313,10 +318,7 @@ export default function VideoCard({ video, size = "md", onDismiss, variant = "gr
);
}
- // ── Grid variant ─────────────────────────────────────────────────────────
- const avatarUrl = video.channel_thumbnail_url ?? channelMeta?.thumbnail_url ?? null;
- const avatarLetter = video.channel_name?.[0]?.toUpperCase() ?? "?";
-
+ // ── Grid variant ────────────────────────────────────────────────────────────
return (
navigate(`/watch/${video.youtube_video_id}`)}
@@ -335,56 +337,62 @@ export default function VideoCard({ video, size = "md", onDismiss, variant = "gr
className="aspect-video rounded-t-2xl overflow-hidden"
/>
-
+
{/* Channel avatar */}
-
{ e.stopPropagation(); navigate(`/channels/${video.channel_id}`); }}>
+
{ e.stopPropagation(); navigate(`/channels/${video.channel_id}`); }}
+ >
{avatarUrl ? (
-

+

) : (
-
{/* Text + actions */}
-
-
+
+
{video.title}
-
-
{video.channel_name}
+
+
{video.channel_name}
{channelNote && (
-
+
)}
{isDormant && !calmMode && (
- zzz
+ zzz
)}
{video.is_recommended && !calmMode && (
-
+
Discover
)}
-
+
{date && {date}}
- {video.view_count > 0 && <>·{formatViews(video.view_count)}>}
+ {video.view_count > 0 && (
+ <>
+ ·
+ {formatViews(video.view_count)}
+ >
+ )}
- {video.description && (
-
- {video.description.replace(/\n+/g, " ")}
-
- )}
-
- {/* Actions — fade in on hover */}
-
+ {/* Actions — desktop hover only (touch users tap to watch) */}
+
{actions}