diff --git a/artifacts/visual-qa/manifest.json b/artifacts/visual-qa/manifest.json
index f215093..58c7aee 100644
--- a/artifacts/visual-qa/manifest.json
+++ b/artifacts/visual-qa/manifest.json
@@ -1,5 +1,5 @@
{
- "generatedAt": "2026-09-12T05:25:45.504Z",
+ "generatedAt": "2026-09-12T06:26:42.753Z",
"module": "communications",
"version": "v3.0",
"referenceMockups": [
@@ -128,19 +128,19 @@
"filename": "mobile-chat.png",
"theme": "state-capture",
"viewport": "mobile-chat",
- "capturedAt": "2026-09-12T05:25:36.209Z"
+ "capturedAt": "2026-09-12T06:26:42.411Z"
},
{
"filename": "mobile-contact.png",
"theme": "state-capture",
"viewport": "mobile-contact",
- "capturedAt": "2026-09-12T05:25:36.390Z"
+ "capturedAt": "2026-09-12T06:26:42.582Z"
},
{
"filename": "mobile-list.png",
"theme": "state-capture",
"viewport": "mobile-list",
- "capturedAt": "2026-09-12T05:25:35.998Z"
+ "capturedAt": "2026-09-12T06:26:42.215Z"
},
{
"filename": "noble-green-desktop-1280.png",
diff --git a/artifacts/visual-qa/mobile-chat.png b/artifacts/visual-qa/mobile-chat.png
index 510ae8f..5d8e598 100644
Binary files a/artifacts/visual-qa/mobile-chat.png and b/artifacts/visual-qa/mobile-chat.png differ
diff --git a/artifacts/visual-qa/mobile-contact.png b/artifacts/visual-qa/mobile-contact.png
index cd8e087..c0c1c6c 100644
Binary files a/artifacts/visual-qa/mobile-contact.png and b/artifacts/visual-qa/mobile-contact.png differ
diff --git a/artifacts/visual-qa/mobile-list.png b/artifacts/visual-qa/mobile-list.png
index 7bd8f3b..4737132 100644
Binary files a/artifacts/visual-qa/mobile-list.png and b/artifacts/visual-qa/mobile-list.png differ
diff --git a/e2e/13-communications-visual-and-responsive.spec.ts b/e2e/13-communications-visual-and-responsive.spec.ts
index 6db33d8..abf0940 100644
--- a/e2e/13-communications-visual-and-responsive.spec.ts
+++ b/e2e/13-communications-visual-and-responsive.spec.ts
@@ -134,7 +134,7 @@ test.describe('Scenario 13: Communications Visual & Responsive Design System V3
await expect(backToListBtn).toBeVisible();
// Check bottom contact teaser button
- const profileTeaserBtn = activeChat.locator('button[aria-label="Открыть карточку контакта"]');
+ const profileTeaserBtn = activeChat.getByRole('button', { name: /Открыть.*контакт/i });
await expect(profileTeaserBtn).toBeVisible();
// Check message composer is positioned within viewport
diff --git a/src/app/layouts/AppShell.tsx b/src/app/layouts/AppShell.tsx
index 571c91a..79c9965 100644
--- a/src/app/layouts/AppShell.tsx
+++ b/src/app/layouts/AppShell.tsx
@@ -10,6 +10,7 @@ import { QuickActionsModal } from '../shell/QuickActionsModal';
import { NotificationsDrawer } from '../shell/NotificationsDrawer';
import { Drawer } from '../../shared/ui';
import { useResponsive } from '../../shared/lib/useResponsive';
+import { useCommunicationsStore } from '../../features/communications/services/communicationsService';
export const AppShell: React.FC = () => {
const {
@@ -25,6 +26,7 @@ export const AppShell: React.FC = () => {
const profile = getActiveProfile();
const location = useLocation();
const isCommunicationsPage = location.pathname.startsWith('/communications');
+ const isMobileChatOpen = useCommunicationsStore((state) => state.isMobileChatOpen);
useEffect(() => {
document.documentElement.setAttribute('data-theme', theme);
@@ -80,13 +82,13 @@ export const AppShell: React.FC = () => {
{/* Center Work Area */}
-
+ {!(isEffectiveMobile && isCommunicationsPage && isMobileChatOpen) &&
}
{/* Main Content Router Outlet */}
diff --git a/src/app/shell/BottomNav.tsx b/src/app/shell/BottomNav.tsx
index ba5ae5a..a97e5bb 100644
--- a/src/app/shell/BottomNav.tsx
+++ b/src/app/shell/BottomNav.tsx
@@ -22,12 +22,12 @@ export const BottomNav: React.FC = () => {