diff --git a/desktop/src/components/chat/InlineImageGallery.test.tsx b/desktop/src/components/chat/InlineImageGallery.test.tsx
index 7862c0d7..18101f14 100644
--- a/desktop/src/components/chat/InlineImageGallery.test.tsx
+++ b/desktop/src/components/chat/InlineImageGallery.test.tsx
@@ -64,6 +64,26 @@ describe('InlineImageGallery', () => {
])
})
+ it('scopes image hover overlays to each image tile', () => {
+ render(
+
+
+
,
+ )
+
+ const firstTile = screen.getByRole('button', { name: /photo\.png/i })
+ expect(firstTile).toHaveClass('group/image')
+ expect(firstTile).not.toHaveClass('group')
+
+ const overlay = firstTile.querySelector('.group-hover\\/image\\:opacity-100')
+ expect(overlay).not.toBeNull()
+ expect(firstTile.querySelector('.group-hover\\:opacity-100')).toBeNull()
+ })
+
it('does not render an in-workspace absolute path twice (dedup by basename)', () => {
// The absolute path is INSIDE workDir, so extractAssistantOutputTargets also
// surfaces it as a relative target (frame.png). It must only render once.
diff --git a/desktop/src/components/chat/InlineImageGallery.tsx b/desktop/src/components/chat/InlineImageGallery.tsx
index 104d5c6f..44427029 100644
--- a/desktop/src/components/chat/InlineImageGallery.tsx
+++ b/desktop/src/components/chat/InlineImageGallery.tsx
@@ -114,7 +114,7 @@ export function InlineImageGallery({ text, sessionId, workDir }: Props) {
key={img.src}
type="button"
onClick={() => setActiveIndex(i)}
- className="group relative overflow-hidden rounded-xl border border-[var(--color-border)] bg-[var(--color-surface-container-low)] text-left shadow-sm transition-all hover:shadow-md hover:border-[var(--color-brand)]/40"
+ className="group/image relative overflow-hidden rounded-xl border border-[var(--color-border)] bg-[var(--color-surface-container-low)] text-left shadow-sm transition-all hover:shadow-md hover:border-[var(--color-brand)]/40"
>
-