diff --git a/tradein-mvp/frontend/src/app/v2/page.tsx b/tradein-mvp/frontend/src/app/v2/page.tsx index f0164c23..043c7a83 100644 --- a/tradein-mvp/frontend/src/app/v2/page.tsx +++ b/tradein-mvp/frontend/src/app/v2/page.tsx @@ -459,7 +459,18 @@ export default function TradeInV2Page() { const [isSmallViewport, setIsSmallViewport] = useState(false); useEffect(() => { const compute = () => { - setArtboardScale(Math.min(1, window.innerWidth / 1536)); + // clientWidth, а НЕ window.innerWidth. innerWidth включает вертикальную + // полосу прокрутки (~15px), поэтому артборд масштабировался под ширину, + // которой на самом деле нет: на 1425px рабочей области он выходил 1440px + // и страница получала ПОСТОЯННЫЙ горизонтальный скролл. Прод 27.08 — + // «юай не помещается»; воспроизводится на любом десктопе, потому что + // страница длинная и вертикальная полоса есть всегда. + // + // Пороги ниже намеренно остаются на innerWidth: это классификация + // устройства («телефон ли это»), а не расчёт геометрии, и полоса + // прокрутки на неё влиять не должна. + const usable = document.documentElement.clientWidth || window.innerWidth; + setArtboardScale(Math.min(1, usable / 1536)); setIsMobile(window.innerWidth < 768); setIsSmallViewport(window.innerWidth < 1024); }; diff --git a/tradein-mvp/frontend/src/components/auth/UserMenu.tsx b/tradein-mvp/frontend/src/components/auth/UserMenu.tsx index d8dd57ee..04f2de1f 100644 --- a/tradein-mvp/frontend/src/components/auth/UserMenu.tsx +++ b/tradein-mvp/frontend/src/components/auth/UserMenu.tsx @@ -195,7 +195,16 @@ export function UserMenu() { padding: 12, // Popover (не card) — допустимая лёгкая тень для отделения. boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)", - zIndex: 200, + // 1000, а не 200. Меню шапки обязано лежать поверх содержимого + // страницы: при 200 его перекрывала мини-карта отчёта, у которой + // внутренние слои Leaflet доходят до 800 (атрибуция). Найдено на + // проде 27.08 — меню аккаунта открывалось ПОД картой. + // + // Корень чинится в HeroBar (`isolation: isolate` на контейнере + // карты), эта правка — вторая половина: даже когда чужой блок снова + // начнёт соперничать за слои, шапка останется сверху по замыслу, а + // не по случайному совпадению чисел. + zIndex: 1000, }} >