diff --git a/vessel/src/app/page.tsx b/vessel/src/app/page.tsx index 5dcff4717..c194619fe 100644 --- a/vessel/src/app/page.tsx +++ b/vessel/src/app/page.tsx @@ -7455,7 +7455,7 @@ export default function App() { guidedDesktopComposerDock ? "gap-0 p-4 pb-56" : guidedMobileComposerDock - ? "gap-5 px-4 pt-5 pb-[var(--guided-mobile-composer-reserve)] sm:px-5" + ? "gap-5 px-4 pt-5 pb-40 sm:px-5" : "gap-0 p-4", )} > @@ -7508,7 +7508,7 @@ export default function App() { "relative shrink-0 pointer-events-auto backdrop-blur-md", sessionActive && "animate-chat-composer-pulse", guidedMobileComposerDock - ? "fixed inset-x-0 bottom-0 z-[80] bg-drift-canvas/95 p-0 shadow-[0_-18px_45px_rgba(2,6,14,0.72)]" + ? "fixed inset-x-0 bottom-[calc(4.5rem+env(safe-area-inset-bottom,0px))] z-[80] bg-drift-canvas/95 p-0 shadow-[0_-18px_45px_rgba(2,6,14,0.72)]" : "border-t border-slate-900 bg-[#07090e]/95 p-3", guidedDesktopComposerDock && "shadow-[0_-12px_32px_rgba(2,6,14,0.55)]", guidedMobileComposerDock && !sessionActive && "pb-[max(0.25rem,env(safe-area-inset-bottom))]", @@ -8081,7 +8081,7 @@ export default function App() { return (
{/* Welcome panel body */} -
+
{renderGuidedRightPanel()}
@@ -8666,7 +8666,7 @@ export default function App() { return (
-
+
{latestReadingText && latestReadingId && (
@@ -10051,7 +10051,7 @@ export default function App() {
)} - {isCompactViewport && !guidedMobileComposerDock && } + {isCompactViewport && } {renderGuidedView()} {renderGuidedPersistentComposerDock()} diff --git a/vessel/src/test/api-smoke.test.ts b/vessel/src/test/api-smoke.test.ts index 1e40fb8b2..556e2f6bb 100644 --- a/vessel/src/test/api-smoke.test.ts +++ b/vessel/src/test/api-smoke.test.ts @@ -4269,12 +4269,12 @@ test('alignment corridor primes on request dispatch instead of generic loading s assert.ok(pageSource.includes('mobileComposerDock={guidedMobileComposerDock}')); assert.ok(pageSource.includes('data-guided-mobile-composer-anchor={guidedMobileComposerDock ? "true" : undefined}')); assert.ok(pageSource.includes('data-guided-persistent-composer="true"')); - assert.ok(pageSource.includes('fixed inset-x-0 bottom-0 z-[80]')); + assert.ok(pageSource.includes('fixed inset-x-0 bottom-[calc(4.5rem+env(safe-area-inset-bottom,0px))] z-[80]')); assert.ok(pageSource.includes('ResizeObserver')); assert.ok(pageSource.includes('GUIDED_MOBILE_COMPOSER_MIN_RESERVE_PX')); assert.ok(pageSource.includes('--guided-mobile-composer-reserve')); - assert.ok(pageSource.includes('pb-[var(--guided-mobile-composer-reserve)]')); - assert.ok(pageSource.includes('isCompactViewport && !guidedMobileComposerDock && ')); + assert.ok(pageSource.includes('pb-40')); + assert.ok(pageSource.includes('isCompactViewport && ')); assert.ok(chatInputSource.includes('mobileComposerDock?: boolean')); assert.ok(chatInputSource.includes('data-chatinput-mobile-dock="true"')); assert.ok(chatInputSource.includes('z-30 border-t border-white')); diff --git a/vessel/src/test/mobile-chat-layout.test.ts b/vessel/src/test/mobile-chat-layout.test.ts index 682de75cd..2aa4532cf 100644 --- a/vessel/src/test/mobile-chat-layout.test.ts +++ b/vessel/src/test/mobile-chat-layout.test.ts @@ -8,10 +8,10 @@ test('mobile chat reserves measured composer space and exposes surface shortcuts assert.match(pageSource, /GUIDED_MOBILE_COMPOSER_MIN_RESERVE_PX/); assert.match(pageSource, /ResizeObserver/); assert.match(pageSource, /--guided-mobile-composer-reserve/); - assert.match(pageSource, /pb-\[var\(--guided-mobile-composer-reserve\)\]/); + assert.match(pageSource, /pb-40/); assert.match(pageSource, /data-guided-orientation-home/); assert.match(pageSource, /guidedMobileComposerDock \? "min-h-0" : "h-full justify-between"/); - assert.match(pageSource, /isCompactViewport && !guidedMobileComposerDock && /); + assert.match(pageSource, /isCompactViewport && /); assert.match(pageSource, /SURFACE_NAV\.planner/); assert.match(pageSource, /SURFACE_NAV\.astroPages/); assert.match(pageSource, /SURFACE_NAV\.plans/);