diff --git a/apps/desktop/src/renderer/components/chat/AgentChatPane.tsx b/apps/desktop/src/renderer/components/chat/AgentChatPane.tsx
index 8c5897113..9d209d4ca 100644
--- a/apps/desktop/src/renderer/components/chat/AgentChatPane.tsx
+++ b/apps/desktop/src/renderer/components/chat/AgentChatPane.tsx
@@ -13842,10 +13842,16 @@ export function AgentChatPane({
style={{ aspectRatio: "560 / 300" }}
exit={{ opacity: 0, scale: 0.8, transition: { duration: 0.3, ease: "easeOut" } }}
>
+ {/* `h-auto` + `max-h-full` left the image at its
+ natural height once the box shrank, so a short
+ window cropped the wordmark against the column's
+ `overflow-hidden` instead of scaling it. Filling
+ the box and letterboxing inside it with
+ `object-contain` keeps the shrink proportional. */}
@@ -13867,14 +13873,6 @@ export function AgentChatPane({
) : null}
- {onImportedSession && !appPanelOpen ? (
- setImportBrowserOpen(true)}
- />
- ) : null}
-
{/* Launch shelf — everything that answers "where does this
run". It is drawn as a recessed drawer tucked under the
composer rather than as another centered band: the lane
@@ -14016,6 +14014,19 @@ export function AgentChatPane({
) : null}
+
+ {/* Last row in the column. Sat between the composer and
+ the launch shelf before, where it wedged itself into
+ the shelf's row and overlapped it in a narrow window;
+ at the bottom it is a hint below everything it can
+ act on rather than a band cutting the stack in two. */}
+ {onImportedSession && !appPanelOpen ? (
+ setImportBrowserOpen(true)}
+ />
+ ) : null}
{appPanelOpen ? (
diff --git a/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.test.tsx b/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.test.tsx
index f5f42d30d..c7338e10f 100644
--- a/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.test.tsx
+++ b/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.test.tsx
@@ -31,11 +31,22 @@ describe("ImportFloatingBadge", () => {
it("dismisses machine-locally per project without opening", () => {
const onOpen = vi.fn();
- render();
+ const { container } = render();
fireEvent.click(screen.getByLabelText("Hide import hint"));
expect(onOpen).not.toHaveBeenCalled();
expect(readImportBadgeDismissed("/Users/dev/ade")).toBe(true);
expect(screen.queryByText("Import your chats from outside ADE")).toBeNull();
+ // Not merely invisible — zero nodes. The badge is a row in a `gap-3`
+ // flex column, so anything it leaves behind once retired (an empty
+ // wrapper included) spends gap the retired hint no longer earns.
+ expect(container.firstChild).toBeNull();
+ });
+
+ it("occupies no layout row for a project that never opts in", () => {
+ const { container } = render();
+ expect(container.firstChild).toBeNull();
+ expect(screen.queryByText("Import your chats from outside ADE")).toBeNull();
+ expect(screen.queryByLabelText("Hide import hint")).toBeNull();
});
it("stays visible for a different project on this machine", () => {
diff --git a/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.tsx b/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.tsx
index 9e361349c..836e513ff 100644
--- a/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.tsx
+++ b/apps/desktop/src/renderer/components/terminals/importSessions/ImportFloatingBadge.tsx
@@ -58,7 +58,9 @@ export function ImportFloatingBadge({
if (!projectRoot || dismissed) return null;
return (
-
+ // `shrink-0` because the draft column this sits in is a height-capped
+ // flex-col where the logo is the only row meant to absorb overflow.
+