diff --git a/docs/mobile-production/README.md b/docs/mobile-production/README.md index b685dee54..4bed0a922 100644 --- a/docs/mobile-production/README.md +++ b/docs/mobile-production/README.md @@ -2,6 +2,9 @@ # Мобильный frontend-релиз без изменения desktop +Следующий production fix: [мобильные дефекты после #407](./fixes-20261010/README.md). +Ниже сохранён исторический отчёт первоначального релиза #407. + Дата проверки: 10.10.2026. Target: `master`, ветка `release/prod-mobile-responsive-20261010`. ## Границы релиза diff --git a/docs/mobile-production/compare.py b/docs/mobile-production/compare.py index e763b1aea..69b52d44b 100644 --- a/docs/mobile-production/compare.py +++ b/docs/mobile-production/compare.py @@ -11,6 +11,7 @@ parser.add_argument("after", type=Path) parser.add_argument("output", type=Path) parser.add_argument("--widths", default="1000,1440,1920") +parser.add_argument("--screens", help="Comma-separated additional states; default gate always uses all 22 core states") args = parser.parse_args() rows = [] screens = ( @@ -19,6 +20,8 @@ "project-edit-fields project-edit-goals project-edit-new-goal analytics-attention " "team-invite-selected" ).split() +if args.screens: + screens = args.screens.split(",") widths = tuple(int(width) for width in args.widths.split(",")) if not widths or any(width < 1000 for width in widths): raise SystemExit("Desktop widths must be >=1000") diff --git a/docs/mobile-production/fixes-20261010/README.md b/docs/mobile-production/fixes-20261010/README.md new file mode 100644 index 000000000..5673f27ab --- /dev/null +++ b/docs/mobile-production/fixes-20261010/README.md @@ -0,0 +1,91 @@ + + +# Исправления мобильного production после #407 + +Base: `master`, production `19439e6d359d37ae1bca4a0d7d4b57d4337869fc`. +Ветка `fix/prod-mobile-layout-20261010` создана от этой revision. Другие изменения dev не включены. + +## Требования + +| Критерий | Ожидаемый результат | +| --------------- | -------------------------------------------------------------------------------------------------------------- | +| Desktop | Pixel comparison с текущим production: 1000, 1440, 1920px, без масок и допуска | +| Mobile/tablet | 320, 390, 768px: без overflow, наложений и переноса иконок под текст кнопки | +| Уведомления | Колокольчик показывает панель в viewport; пустое состояние и список, прочитать все, закрытие Escape/вне панели | +| Программы | Одна рамка карточки, аватар отдельно от заголовка; organizer-only и participant-only варианты кнопок | +| Профиль/проект | Аватар и имя по центру; описание/навыки/цели, затем основные данные/команда/опыт/контакты, затем новости | +| Новости/проекты | Иконки внутри фильтров; плюс рядом с подписью; описание карточки ограничено целыми строками | +| Вакансии | Один контур бейджа; поиск и фильтры перед результатами, включая DOM order | +| Редакторы | Сохранение на всю ширину рабочей строки; back отдельно; безопасный перенос длинного текста с иконкой | + +## Реализация + +Все геометрические изменения SCSS ограничены `max-width: 999px`. +У shared Button исправлен селектор существующего единственного projection slot `.button__label`. +Desktop loading/projection и DOM кнопки не менялись. +Панель уведомлений была `position: fixed; top: 100%`: открывалась за нижним краем viewport. +Она теперь располагается под шапкой; production handlers, endpoints и permissions сохранены. + +У ProgramCard сняты унаследованные отрицательный margin, padding и внутренняя рамка. +FeedFilter больше не наследует desktop transform круглой иконки. +В VacancyStatus внешний host не рисует вторую рамку поверх shared Badge. +InfoCard больше не сохраняет фиксированный `flex-basis` в 24px при мобильном межстрочном 18px. +Описание занимает до трёх целых строк с ellipsis; полное описание доступно в проекте. + +Для профиля и проекта mobile DOM отличается по порядку блоков, desktop siblings сохранены. +Основные данные и дополнительные сведения проецируются перед новостями через единственный slot, +без второго экземпляра центрального компонента и повторной загрузки его facade. +Карточки направлений на mobile стоят в две колонки с читаемыми подписями. +В редакторе проекта удаление располагается после действий сохранения; unit-тесты выбирают +сохранение по варианту кнопки, а не по прежнему индексу элемента. + +Неоднозначный пункт «в чат с аналитикой» трактован как оформление виджета участника: +увеличены межстрочные интервалы, подписи этапов и маркеры. Новые чаты, роли, API и правила подачи не добавлены. + +## Проверки и воспроизведение + +- Production build: exit 0, budgets сохранены. +- `npm run test:ci`: **2099/2099**, 413 файлов, exit 0. +- ESLint: 0 errors, 6 существующих unused-disable warnings. +- Stylelint: 17 изменённых SCSS, exit 0. +- Desktop: [66/66 основных состояний](./desktop-comparison.json) и + [16/16 дополнительных состояний](./desktop-role-comparison.json), **0 отличающихся RGB pixels**. +- Mobile: [viewport/композиция](./viewport-checks.json), [состояния полей и модальных окон](./detail-checks.json), + [раздельные роли, кнопки и уведомления](./mobile-layout.json). 320/390/768px, assertions passed. +- Репрезентативные снимки: [программы](./screenshots/programs-390.png), + [участник](./screenshots/participant-390.png), [уведомления](./screenshots/notifications-loaded-390.png), + [проекты](./screenshots/projects-390.png), [вакансии](./screenshots/vacancies-390.png), + [профиль](./screenshots/profile-edit-390.png), [достижения](./screenshots/achievements-390.png). + +Browser: headless Chromium/Chrome, production Angular build, только synthetic API/WS fixtures. +Baseline и результат используют одинаковые данные, fonts, assets и отключённые анимации. +Новые сценарии не смешивают manager/expert/member одновременно. + +Основная матрица включает длинное описание программы. Дополнительные role/action fixtures +используют короткое описание: старый production `AfterViewInit` иногда захватывает описание +до создания элемента, из-за чего «подробнее» появляется нестабильно. Этот код в PR не менялся. +Role/action matrix проверяется также трижды на 1920px с равенством повторных PNG bytes. + +```powershell +$env:PLAYWRIGHT_MODULE = '' +$env:CHROME_PATH = '' +$env:QA_BUILD_ROOT = '' +node docs/mobile-production/visual.cjs baseline http://127.0.0.1:4471 '1000,1440,1920' +node docs/mobile-production/visual.cjs baseline http://127.0.0.1:4471 '1000,1440,1920' details +node docs/mobile-production/layout-regression.cjs baseline '1440,1920' +$env:QA_BUILD_ROOT = 'dist/social_platform' +node docs/mobile-production/visual.cjs verified http://127.0.0.1:4472 '320,390,768,1000,1440,1920' +node docs/mobile-production/visual.cjs verified http://127.0.0.1:4472 '320,390,768,1000,1440,1920' details +node docs/mobile-production/layout-regression.cjs verified '320,390,768,1440,1920' +python docs/mobile-production/compare.py /baseline /verified +``` + +`preview.cjs` отклоняет пустой SVG sprite. Windows CLI `svg-sprite` с Unix glob может создать +пустой файл: для QA восстановлен tracked production sprite и скопирован в оба build assets. +JavaScript/CSS bundles не изменялись. Сгенерированный пустой source sprite в PR не включён. + +Статические проверки: production build, полный Vitest, ESLint, Stylelint изменённых SCSS, +`npm run format:check` на полном Git index с LF (как в Linux CI). + +Физические iOS/Android и Safari/WebKit не проверены; live backend данные не использовались. +Этот PR предназначен для `master`; merge/deploy остаётся отдельным действием. diff --git a/docs/mobile-production/fixes-20261010/desktop-comparison.json b/docs/mobile-production/fixes-20261010/desktop-comparison.json new file mode 100644 index 000000000..cc3c9bddf --- /dev/null +++ b/docs/mobile-production/fixes-20261010/desktop-comparison.json @@ -0,0 +1,530 @@ +[ + { + "screen": "analytics-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "analytics-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "analytics-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "analytics-attention-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "analytics-attention-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "analytics-attention-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "course-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "course-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "course-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "courses-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "courses-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "courses-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "feed-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "feed-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "feed-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "members-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "members-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "members-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "partners-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "partners-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "partners-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "profile-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "profile-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "profile-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "profile-edit-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "profile-edit-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "profile-edit-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "program-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "program-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "program-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "programs-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "programs-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "programs-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-fields-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-fields-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-fields-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-goals-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-goals-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-goals-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-new-goal-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-new-goal-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "project-edit-new-goal-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "projects-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "projects-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "projects-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "projects-invites-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "projects-invites-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "projects-invites-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "team-invite-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "team-invite-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "team-invite-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "team-invite-selected-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "team-invite-selected-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "team-invite-selected-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "vacancies-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "vacancies-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "vacancies-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "vacancy-1000", + "beforeSize": [1000, 844], + "afterSize": [1000, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "vacancy-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "vacancy-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + } +] diff --git a/docs/mobile-production/fixes-20261010/desktop-role-comparison.json b/docs/mobile-production/fixes-20261010/desktop-role-comparison.json new file mode 100644 index 000000000..adab99084 --- /dev/null +++ b/docs/mobile-production/fixes-20261010/desktop-role-comparison.json @@ -0,0 +1,130 @@ +[ + { + "screen": "achievements-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "achievements-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "contacts-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "contacts-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "controls-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "controls-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "create-project-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "create-project-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "notifications-empty-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "notifications-empty-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "notifications-loaded-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "notifications-loaded-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "organizer-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "organizer-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "participant-1440", + "beforeSize": [1440, 844], + "afterSize": [1440, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + }, + { + "screen": "participant-1920", + "beforeSize": [1920, 844], + "afterSize": [1920, 844], + "exactChangedPixels": 0, + "maxChannelDelta": 0, + "passed": true + } +] diff --git a/docs/mobile-production/fixes-20261010/detail-checks.json b/docs/mobile-production/fixes-20261010/detail-checks.json new file mode 100644 index 000000000..26d24827d --- /dev/null +++ b/docs/mobile-production/fixes-20261010/detail-checks.json @@ -0,0 +1,1973 @@ +[ + { + "name": "projects", + "width": 320, + "layout": { + "list": { + "left": 12, + "right": 308, + "top": 1618, + "bottom": 1862, + "width": 296 + }, + "card": { + "left": 30, + "right": 290, + "top": 1618, + "bottom": 1862, + "width": 260 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-project-activity-card" + ], + "text": "Проекты\nпроекты\nсоздать проект\n\nПоиск\n\nмои проекты\n\nПривязан к программе\n\nГородские проекты\n\nПрограмма: Акселератор студенческих проектов\n\nСервис для студенческих команд\n\nЛидер\n\nможно редактировать\n\nОткрыть\nпоказать раздел\n\nмои подписки\n\nГородские проекты\n\nСервис для студенческих команд\n\nОткрыть\nпок" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 320, + "layout": { + "actions": [ + { + "left": 12, + "right": 308, + "top": 148, + "bottom": 192, + "width": 296 + }, + { + "left": 12, + "right": 308, + "top": 204, + "bottom": 248, + "width": 296 + }, + { + "left": 12, + "right": 308, + "top": 260, + "bottom": 304, + "width": 296 + } + ], + "regionFont": "16px", + "industryFont": "16px", + "date": { + "left": 12, + "right": 308, + "top": 1226.5625, + "bottom": 1274.953125, + "width": 296 + }, + "dateHint": { + "left": 256, + "right": 300, + "top": 1228.75, + "bottom": 1272.75, + "width": 44 + }, + "datePadding": 64, + "avatar": { + "left": 126, + "right": 194, + "top": 455, + "bottom": 523, + "width": 68 + }, + "avatarHint": { + "left": 197, + "right": 241, + "top": 467, + "bottom": 511, + "width": 44 + }, + "goals": [ + { + "left": 12, + "right": 308, + "top": 1937.34375, + "bottom": 1992.9375, + "width": 296 + }, + { + "left": 12, + "right": 308, + "top": 2098.328125, + "bottom": 2153.921875, + "width": 296 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nлоготип\nпрезентация\n\nПрезентации формата .PDF\nили .PPTX весом до 50МБ\n\nобложка\n\nСтандартная обложка\n\nЗагрузить файл\n1\nназ" + }, + "passed": true + }, + { + "name": "analytics", + "width": 320, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-modal", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nназад\n\nУправление программой\n\nАналитика\n\nСводка пути участников от регистрации до экспертной оценки.\n\nВыгрузки\nВсе проекты\nСданные проекты\nОценки проектов\nУчастники\n1\nПроекты\n1\nЭксперты\n1\nКоманда\n1\nРегионы проектов\nОченьДлинноеНазваниеБезПробеловОченьДл" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 320, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 28, + "right": 292, + "top": 583.1875, + "bottom": 627.1875, + "width": 264 + }, + { + "left": 28, + "right": 292, + "top": 639.1875, + "bottom": 683.1875, + "width": 264 + } + ], + "footer": { + "left": 28, + "right": 292, + "top": 583.1875, + "bottom": 683.1875, + "width": 264 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nКоманда проекта\n\nУправляйте участниками проекта, приглашайте новых и назначайте роли.\n\nПригласить участника\nУчастники ком" + }, + "passed": true + }, + { + "name": "projects", + "width": 390, + "layout": { + "list": { + "left": 16, + "right": 374, + "top": 1558, + "bottom": 1802, + "width": 358 + }, + "card": { + "left": 65, + "right": 325, + "top": 1558, + "bottom": 1802, + "width": 260 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-project-activity-card" + ], + "text": "Проекты\nпроекты\nсоздать проект\n\nПоиск\n\nмои проекты\n\nПривязан к программе\n\nГородские проекты\n\nПрограмма: Акселератор студенческих проектов\n\nСервис для студенческих команд\n\nЛидер\n\nможно редактировать\n\nОткрыть\nпоказать раздел\n\nмои подписки\n\nГородские проекты\n\nСервис для студенческих команд\n\nОткрыть\nпок" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 390, + "layout": { + "actions": [ + { + "left": 16, + "right": 374, + "top": 148, + "bottom": 192, + "width": 358 + }, + { + "left": 16, + "right": 374, + "top": 204, + "bottom": 248, + "width": 358 + }, + { + "left": 16, + "right": 374, + "top": 260, + "bottom": 304, + "width": 358 + } + ], + "regionFont": "16px", + "industryFont": "16px", + "date": { + "left": 16, + "right": 374, + "top": 1226.5625, + "bottom": 1274.953125, + "width": 358 + }, + "dateHint": { + "left": 322, + "right": 366, + "top": 1228.75, + "bottom": 1272.75, + "width": 44 + }, + "datePadding": 64, + "avatar": { + "left": 161, + "right": 229, + "top": 455, + "bottom": 523, + "width": 68 + }, + "avatarHint": { + "left": 232, + "right": 276, + "top": 467, + "bottom": 511, + "width": 44 + }, + "goals": [ + { + "left": 16, + "right": 374, + "top": 1871.34375, + "bottom": 1915.34375, + "width": 358 + }, + { + "left": 16, + "right": 374, + "top": 2020.734375, + "bottom": 2064.734375, + "width": 358 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nлоготип\nпрезентация\n\nПрезентации формата .PDF\nили .PPTX весом до 50МБ\n\nобложка\n\nСтандартная обложка\n\nЗагрузить файл\n1\nназ" + }, + "passed": true + }, + { + "name": "analytics", + "width": 390, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-modal", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nназад\n\nУправление программой\n\nАналитика\n\nСводка пути участников от регистрации до экспертной оценки.\n\nВыгрузки\nВсе проекты\nСданные проекты\nОценки проектов\nУчастники\n1\nПроекты\n1\nЭксперты\n1\nКоманда\n1\nРегионы проектов\nОченьДлинноеНазваниеБезПробеловОченьДл" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 390, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 28, + "right": 362, + "top": 554.59375, + "bottom": 598.59375, + "width": 334 + }, + { + "left": 28, + "right": 362, + "top": 610.59375, + "bottom": 654.59375, + "width": 334 + } + ], + "footer": { + "left": 28, + "right": 362, + "top": 554.59375, + "bottom": 654.59375, + "width": 334 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nКоманда проекта\n\nУправляйте участниками проекта, приглашайте новых и назначайте роли.\n\nПригласить участника\nУчастники ком" + }, + "passed": true + }, + { + "name": "projects", + "width": 768, + "layout": { + "list": { + "left": 16, + "right": 737, + "top": 1524.34375, + "bottom": 1768.34375, + "width": 721 + }, + "card": { + "left": 246.5, + "right": 506.5, + "top": 1524.34375, + "bottom": 1768.34375, + "width": 260 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-project-activity-card" + ], + "text": "Проекты\nпроекты\nсоздать проект\n\nПоиск\n\nмои проекты\n\nПривязан к программе\n\nГородские проекты\n\nПрограмма: Акселератор студенческих проектов\n\nСервис для студенческих команд\n\nЛидер\n\nможно редактировать\n\nОткрыть\nпоказать раздел\n\nмои подписки\n\nГородские проекты\n\nСервис для студенческих команд\n\nОткрыть\nпок" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 768, + "layout": { + "actions": [ + { + "left": 16, + "right": 737, + "top": 148, + "bottom": 192, + "width": 721 + }, + { + "left": 16, + "right": 737, + "top": 204, + "bottom": 248, + "width": 721 + }, + { + "left": 16, + "right": 737, + "top": 260, + "bottom": 304, + "width": 721 + } + ], + "regionFont": "14px", + "industryFont": "14px", + "date": { + "left": 384.5, + "right": 737, + "top": 696.59375, + "bottom": 742.1875, + "width": 352.5 + }, + "dateHint": { + "left": 685, + "right": 729, + "top": 697.390625, + "bottom": 741.390625, + "width": 44 + }, + "datePadding": 64, + "avatar": { + "left": 24, + "right": 92, + "top": 477, + "bottom": 545, + "width": 68 + }, + "avatarHint": { + "left": 95, + "right": 139, + "top": 489, + "bottom": 533, + "width": 44 + }, + "goals": [ + { + "left": 16, + "right": 737, + "top": 1114.78125, + "bottom": 1158.78125, + "width": 721 + }, + { + "left": 16, + "right": 737, + "top": 1261.375, + "bottom": 1305.375, + "width": 721 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nлоготип\nпрезентация\n\nПрезентации формата .PDF\nили .PPTX весом до 50МБ\n\nобложка\n\nСтандартная обложка\n\nЗагрузить файл\n1\nназ" + }, + "passed": true + }, + { + "name": "analytics", + "width": 768, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-modal", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nназад\n\nУправление программой\n\nАналитика\n\nСводка пути участников от регистрации до экспертной оценки.\n\nВыгрузки\nВсе проекты\nСданные проекты\nОценки проектов\nУчастники\n1\nПроекты\n1\nЭксперты\n1\nКоманда\n1\nРегионы проектов\nОченьДлинноеНазваниеБезПробеловОченьДл" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 768, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 120.5, + "right": 632.5, + "top": 574.09375, + "bottom": 600.09375, + "width": 512 + }, + { + "left": 120.5, + "right": 632.5, + "top": 612.09375, + "bottom": 638.09375, + "width": 512 + } + ], + "footer": { + "left": 120.5, + "right": 632.5, + "top": 574.09375, + "bottom": 638.09375, + "width": 512 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nКоманда проекта\n\nУправляйте участниками проекта, приглашайте новых и назначайте роли.\n\nПригласить участника\nУчастники ком" + }, + "passed": true + }, + { + "name": "projects", + "width": 1000, + "layout": { + "list": { + "left": 778, + "right": 935, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + }, + "card": { + "left": 778, + "right": 935, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-button", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-button", + "app-project-activity-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпроекты\n\nПоиск\n\nмои проекты\n\nВ программе\n\nГородские проекты\n\nСервис для студенческих ком" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 1000, + "layout": { + "actions": [ + { + "left": 444, + "right": 601, + "top": 89.203125, + "bottom": 114.796875, + "width": 157 + }, + { + "left": 611, + "right": 768, + "top": 89.203125, + "bottom": 114.796875, + "width": 157 + }, + { + "left": 778, + "right": 935, + "top": 89.203125, + "bottom": 114.796875, + "width": 157 + } + ], + "regionFont": "12px", + "industryFont": "12px", + "date": { + "left": 865, + "right": 935, + "top": 428.78125, + "bottom": 470.375, + "width": 70 + }, + "dateHint": { + "left": 918, + "right": 938, + "top": 422.015625, + "bottom": 448.015625, + "width": 20 + }, + "datePadding": 0, + "avatar": { + "left": 197.5, + "right": 265.5, + "top": 287.1875, + "bottom": 355.1875, + "width": 68 + }, + "avatarHint": { + "left": 253.5, + "right": 269.5, + "top": 287.078125, + "bottom": 309.078125, + "width": 16 + }, + "goals": [ + { + "left": 197.5, + "right": 935, + "top": 976.34375, + "bottom": 1001.9375, + "width": 737.5 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "analytics", + "width": 1000, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\n\nУправление программой\n\nАналитика\n" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 1000, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 248, + "right": 388, + "top": 592.296875, + "bottom": 618.296875, + "width": 140 + }, + { + "left": 400, + "right": 608, + "top": 592.296875, + "bottom": 618.296875, + "width": 208 + } + ], + "footer": { + "left": 248, + "right": 752, + "top": 592.296875, + "bottom": 618.296875, + "width": 504 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "projects", + "width": 1440, + "layout": { + "list": { + "left": 1075.484375, + "right": 1232.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + }, + "card": { + "left": 1075.484375, + "right": 1232.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-button", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-button", + "app-project-activity-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпроекты\n\nПоиск\n\nмои проекты\n\nВ программе\n\nГородские проекты\n\nСервис для студенческих ком" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 1440, + "layout": { + "actions": [ + { + "left": 733.71875, + "right": 890.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 900.71875, + "right": 1057.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 1067.71875, + "right": 1224.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + } + ], + "regionFont": "12px", + "industryFont": "12px", + "date": { + "left": 1156.90625, + "right": 1226.90625, + "top": 401.78125, + "bottom": 443.375, + "width": 70 + }, + "dateHint": { + "left": 1209.90625, + "right": 1229.90625, + "top": 395.015625, + "bottom": 421.015625, + "width": 20 + }, + "datePadding": 0, + "avatar": { + "left": 365.828125, + "right": 433.828125, + "top": 260.1875, + "bottom": 328.1875, + "width": 68 + }, + "avatarHint": { + "left": 421.828125, + "right": 437.828125, + "top": 260.078125, + "bottom": 282.078125, + "width": 16 + }, + "goals": [ + { + "left": 365.828125, + "right": 1232.484375, + "top": 934.15625, + "bottom": 959.75, + "width": 866.65625 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "analytics", + "width": 1440, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\n\nУправление программой\n\nАналитика\n" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 1440, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 468, + "right": 608, + "top": 592.296875, + "bottom": 618.296875, + "width": 140 + }, + { + "left": 620, + "right": 828, + "top": 592.296875, + "bottom": 618.296875, + "width": 208 + } + ], + "footer": { + "left": 468, + "right": 972, + "top": 592.296875, + "bottom": 618.296875, + "width": 504 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "projects", + "width": 1920, + "layout": { + "list": { + "left": 1315.484375, + "right": 1472.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + }, + "card": { + "left": 1315.484375, + "right": 1472.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-button", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-button", + "app-project-activity-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпроекты\n\nПоиск\n\nмои проекты\n\nВ программе\n\nГородские проекты\n\nСервис для студенческих ком" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 1920, + "layout": { + "actions": [ + { + "left": 973.71875, + "right": 1130.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 1140.71875, + "right": 1297.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 1307.71875, + "right": 1464.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + } + ], + "regionFont": "12px", + "industryFont": "12px", + "date": { + "left": 1396.90625, + "right": 1466.90625, + "top": 401.78125, + "bottom": 443.375, + "width": 70 + }, + "dateHint": { + "left": 1449.90625, + "right": 1469.90625, + "top": 395.015625, + "bottom": 421.015625, + "width": 20 + }, + "datePadding": 0, + "avatar": { + "left": 605.828125, + "right": 673.828125, + "top": 260.1875, + "bottom": 328.1875, + "width": 68 + }, + "avatarHint": { + "left": 661.828125, + "right": 677.828125, + "top": 260.078125, + "bottom": 282.078125, + "width": 16 + }, + "goals": [ + { + "left": 605.828125, + "right": 1472.484375, + "top": 934.15625, + "bottom": 959.75, + "width": 866.65625 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "analytics", + "width": 1920, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\n\nУправление программой\n\nАналитика\n" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 1920, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 708, + "right": 848, + "top": 592.296875, + "bottom": 618.296875, + "width": 140 + }, + { + "left": 860, + "right": 1068, + "top": 592.296875, + "bottom": 618.296875, + "width": 208 + } + ], + "footer": { + "left": 708, + "right": 1212, + "top": 592.296875, + "bottom": 618.296875, + "width": 504 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + } +] diff --git a/docs/mobile-production/fixes-20261010/mobile-layout.json b/docs/mobile-production/fixes-20261010/mobile-layout.json new file mode 100644 index 000000000..1695e2bde --- /dev/null +++ b/docs/mobile-production/fixes-20261010/mobile-layout.json @@ -0,0 +1,415 @@ +[ + { + "width": 320, + "variant": "organizer", + "passed": true + }, + { + "width": 320, + "variant": "participant", + "passed": true + }, + { + "width": 320, + "variant": "create-project", + "icons": [ + { + "text": "создать проект", + "icon": { + "x": 142, + "y": 174, + "right": 152, + "bottom": 184, + "width": 10, + "height": 10 + }, + "label": { + "x": 29, + "y": 159, + "right": 152, + "bottom": 199, + "width": 123, + "height": 40 + }, + "textBox": { + "x": 52.4375, + "y": 159, + "right": 110.5625, + "bottom": 198, + "width": 58.125, + "height": 39 + }, + "drawn": 9.7694730758667 + } + ] + }, + { + "width": 320, + "variant": "controls", + "passed": true + }, + { + "width": 320, + "variant": "notifications-empty", + "passed": true + }, + { + "width": 320, + "variant": "notifications-loaded", + "passed": true + }, + { + "width": 390, + "variant": "organizer", + "passed": true + }, + { + "width": 390, + "variant": "participant", + "passed": true + }, + { + "width": 390, + "variant": "create-project", + "icons": [ + { + "text": "создать проект", + "icon": { + "x": 347, + "y": 114, + "right": 357, + "bottom": 124, + "width": 10, + "height": 10 + }, + "label": { + "x": 234, + "y": 99, + "right": 357, + "bottom": 139, + "width": 123, + "height": 40 + }, + "textBox": { + "x": 257.4375, + "y": 99, + "right": 315.5625, + "bottom": 138, + "width": 58.125, + "height": 39 + }, + "drawn": 9.7694730758667 + } + ] + }, + { + "width": 390, + "variant": "controls", + "passed": true + }, + { + "width": 390, + "variant": "notifications-empty", + "passed": true + }, + { + "width": 390, + "variant": "notifications-loaded", + "passed": true + }, + { + "width": 768, + "variant": "organizer", + "passed": true + }, + { + "width": 768, + "variant": "participant", + "passed": true + }, + { + "width": 768, + "variant": "create-project", + "icons": [ + { + "text": "создать проект", + "icon": { + "x": 702, + "y": 109.59375, + "right": 712, + "bottom": 119.59375, + "width": 10, + "height": 10 + }, + "label": { + "x": 605, + "y": 99, + "right": 712, + "bottom": 130.1875, + "width": 107, + "height": 31.1875 + }, + "textBox": { + "x": 624.59375, + "y": 98, + "right": 674.40625, + "bottom": 130.59375, + "width": 49.8125, + "height": 32.59375 + }, + "drawn": 9.7694730758667 + } + ] + }, + { + "width": 768, + "variant": "controls", + "passed": true + }, + { + "width": 768, + "variant": "notifications-empty", + "passed": true + }, + { + "width": 768, + "variant": "notifications-loaded", + "passed": true + }, + { + "width": 1440, + "variant": "organizer", + "passed": true + }, + { + "width": 1440, + "variant": "participant", + "passed": true + }, + { + "width": 1440, + "variant": "create-project", + "icons": [ + { + "text": "создать проект", + "icon": { + "x": 1202.359375, + "y": 157.796875, + "right": 1212.359375, + "bottom": 167.796875, + "width": 10, + "height": 10 + }, + "label": { + "x": 0, + "y": 0, + "right": 0, + "bottom": 0, + "width": 0, + "height": 0 + }, + "textBox": { + "x": 1095.609375, + "y": 154, + "right": 1192.359375, + "bottom": 171, + "width": 96.75, + "height": 17 + }, + "drawn": 9.7694730758667 + } + ] + }, + { + "width": 1440, + "variant": "controls", + "passed": true + }, + { + "width": 1440, + "variant": "notifications-empty", + "passed": true + }, + { + "width": 1440, + "variant": "notifications-loaded", + "passed": true + }, + { + "width": 1920, + "variant": "organizer", + "passed": true + }, + { + "width": 1920, + "variant": "participant", + "passed": true + }, + { + "width": 1920, + "variant": "create-project", + "icons": [ + { + "text": "создать проект", + "icon": { + "x": 1442.359375, + "y": 157.796875, + "right": 1452.359375, + "bottom": 167.796875, + "width": 10, + "height": 10 + }, + "label": { + "x": 0, + "y": 0, + "right": 0, + "bottom": 0, + "width": 0, + "height": 0 + }, + "textBox": { + "x": 1335.609375, + "y": 154, + "right": 1432.359375, + "bottom": 171, + "width": 96.75, + "height": 17 + }, + "drawn": 9.7694730758667 + } + ] + }, + { + "width": 1920, + "variant": "controls", + "passed": true + }, + { + "width": 1920, + "variant": "notifications-empty", + "passed": true + }, + { + "width": 1920, + "variant": "notifications-loaded", + "passed": true + }, + { + "width": 1920, + "variant": "organizer", + "passed": true + }, + { + "width": 1920, + "variant": "participant", + "passed": true + }, + { + "width": 1920, + "variant": "create-project", + "icons": [ + { + "text": "создать проект", + "icon": { + "x": 1442.359375, + "y": 157.796875, + "right": 1452.359375, + "bottom": 167.796875, + "width": 10, + "height": 10 + }, + "label": { + "x": 0, + "y": 0, + "right": 0, + "bottom": 0, + "width": 0, + "height": 0 + }, + "textBox": { + "x": 1335.609375, + "y": 154, + "right": 1432.359375, + "bottom": 171, + "width": 96.75, + "height": 17 + }, + "drawn": 9.7694730758667 + } + ] + }, + { + "width": 1920, + "variant": "controls", + "passed": true + }, + { + "width": 1920, + "variant": "notifications-empty", + "passed": true + }, + { + "width": 1920, + "variant": "notifications-loaded", + "passed": true + }, + { + "width": 1920, + "variant": "organizer", + "passed": true + }, + { + "width": 1920, + "variant": "participant", + "passed": true + }, + { + "width": 1920, + "variant": "create-project", + "icons": [ + { + "text": "создать проект", + "icon": { + "x": 1442.359375, + "y": 157.796875, + "right": 1452.359375, + "bottom": 167.796875, + "width": 10, + "height": 10 + }, + "label": { + "x": 0, + "y": 0, + "right": 0, + "bottom": 0, + "width": 0, + "height": 0 + }, + "textBox": { + "x": 1335.609375, + "y": 154, + "right": 1432.359375, + "bottom": 171, + "width": 96.75, + "height": 17 + }, + "drawn": 9.7694730758667 + } + ] + }, + { + "width": 1920, + "variant": "controls", + "passed": true + }, + { + "width": 1920, + "variant": "notifications-empty", + "passed": true + }, + { + "width": 1920, + "variant": "notifications-loaded", + "passed": true + } +] diff --git a/docs/mobile-production/fixes-20261010/screenshots/achievements-390.png b/docs/mobile-production/fixes-20261010/screenshots/achievements-390.png new file mode 100644 index 000000000..3d3d59b87 Binary files /dev/null and b/docs/mobile-production/fixes-20261010/screenshots/achievements-390.png differ diff --git a/docs/mobile-production/fixes-20261010/screenshots/notifications-loaded-390.png b/docs/mobile-production/fixes-20261010/screenshots/notifications-loaded-390.png new file mode 100644 index 000000000..fb8b21d5c Binary files /dev/null and b/docs/mobile-production/fixes-20261010/screenshots/notifications-loaded-390.png differ diff --git a/docs/mobile-production/fixes-20261010/screenshots/participant-390.png b/docs/mobile-production/fixes-20261010/screenshots/participant-390.png new file mode 100644 index 000000000..46a23ff09 Binary files /dev/null and b/docs/mobile-production/fixes-20261010/screenshots/participant-390.png differ diff --git a/docs/mobile-production/fixes-20261010/screenshots/profile-edit-390.png b/docs/mobile-production/fixes-20261010/screenshots/profile-edit-390.png new file mode 100644 index 000000000..6ae7396ad Binary files /dev/null and b/docs/mobile-production/fixes-20261010/screenshots/profile-edit-390.png differ diff --git a/docs/mobile-production/fixes-20261010/screenshots/programs-390.png b/docs/mobile-production/fixes-20261010/screenshots/programs-390.png new file mode 100644 index 000000000..8cf2aaa44 Binary files /dev/null and b/docs/mobile-production/fixes-20261010/screenshots/programs-390.png differ diff --git a/docs/mobile-production/fixes-20261010/screenshots/projects-390.png b/docs/mobile-production/fixes-20261010/screenshots/projects-390.png new file mode 100644 index 000000000..fe023d8f8 Binary files /dev/null and b/docs/mobile-production/fixes-20261010/screenshots/projects-390.png differ diff --git a/docs/mobile-production/fixes-20261010/screenshots/vacancies-390.png b/docs/mobile-production/fixes-20261010/screenshots/vacancies-390.png new file mode 100644 index 000000000..52c0d01f9 Binary files /dev/null and b/docs/mobile-production/fixes-20261010/screenshots/vacancies-390.png differ diff --git a/docs/mobile-production/fixes-20261010/viewport-checks.json b/docs/mobile-production/fixes-20261010/viewport-checks.json new file mode 100644 index 000000000..48d221adc --- /dev/null +++ b/docs/mobile-production/fixes-20261010/viewport-checks.json @@ -0,0 +1,5840 @@ +[ + { + "name": "feed", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/feed", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-vacancy-skills", + "app-tag", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-vacancy-skills", + "app-tag" + ], + "text": "Новости\nвсе новости\n88\nновости проектов\n56\nсвежие вакансии\n1\nновости сообщества\n31\nновости программ\n0\nобразование\n0\nНовая вакансия\n29.09.2026\nПроект / компания\nГородские проекты\nДизайнер интерфейсов\n\nПомогите создавать понятные интерфейсы для студенческих команд.\n\nМотивированность\n\nГлубинное интервь" + }, + "passed": true + }, + { + "name": "projects", + "width": 320, + "layout": { + "list": { + "left": 12, + "right": 308, + "top": 1618, + "bottom": 1862, + "width": 296 + }, + "card": { + "left": 30, + "right": 290, + "top": 1618, + "bottom": 1862, + "width": 260 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-project-activity-card" + ], + "text": "Проекты\nпроекты\nсоздать проект\n\nПоиск\n\nмои проекты\n\nПривязан к программе\n\nГородские проекты\n\nПрограмма: Акселератор студенческих проектов\n\nСервис для студенческих команд\n\nЛидер\n\nможно редактировать\n\nОткрыть\nпоказать раздел\n\nмои подписки\n\nГородские проекты\n\nСервис для студенческих команд\n\nОткрыть\nпок" + }, + "passed": true + }, + { + "name": "members", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/members", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-page-header", + "app-back", + "app-member-statistics-card", + "app-member-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-members", + "app-page-header", + "app-back", + "app-member-statistics-card", + "app-member-card" + ], + "text": "Участники\nучастники\nФильтры\nПерейти в профиль\nСтатистика\nВсего участников\n—\nВ проектах\n—\nВ программах\n—\nНе удалось загрузить статистику участников\nКандидат\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nРазработчик • 26 л" + }, + "passed": true + }, + { + "name": "programs", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/program/all", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-page-header", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-program", + "app-page-header", + "app-back", + "app-search", + "app-main", + "app-program-card" + ], + "text": "Программы\nпрограммы\n\nПоиск\n\nКейс-чемпионат студенческих проектов\n\nты уже участвуешь!\n\n01.10.2026 - 01.01.2027\n\nдля всей России" + }, + "passed": true + }, + { + "name": "program", + "width": 320, + "layout": { + "emptyContacts": 0 + }, + "viewport": { + "actualPath": "/office/program/1", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nоценка проектов\nаналитика\nпроекты-участники\nучастники\nматериалы\nаналитика\nорганизатор\nУчастники\n1\nПроекты\n1\nСдано\nрешений\n0\nБез проектов\n0\n0,0%\nОткрыть →\nо программе\n\nПрограмма помогает студенческим командам развивать проекты и работать с экспертами. Уч" + }, + "passed": true + }, + { + "name": "profile", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/1", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-profile-main", + "app-profile-mid-side", + "app-project-direction-card", + "app-modal", + "app-profile-left-side", + "app-profile-right-side", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-profile-main", + "app-profile-mid-side", + "app-project-direction-card", + "app-profile-left-side", + "app-profile-right-side", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Профиль\nАлексей Куделько\nподелиться профилем\nмои проекты\ncкачать CV\nредактировать\nобо мне\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nнавыки\n\nметаданные\n\n26 лет\n\nМосква\n\nРазработчик\n\nпроекты\n\nГородские проекты\n\n0 / 15" + }, + "passed": true + }, + { + "name": "project", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/projects/1", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-projects-mid-side", + "app-project-direction-card", + "app-modal", + "app-projects-left-side", + "app-projects-right-side", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-projects-mid-side", + "app-project-direction-card", + "app-projects-left-side", + "app-projects-right-side", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Профиль проекта\nГородские проекты\nрабочая зона\nчат проекта\nкоманда\nредактировать\nо проекте\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nпроблема\n\nцелевая аудитория\n\nактуальность\n\nцели\n\nпартнеры\n\nосновное\nПрограмма\nАксе" + }, + "passed": true + }, + { + "name": "vacancies", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/all", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-page-header", + "app-back", + "app-search", + "app-vacancy-filter", + "app-button", + "app-checkbox", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-vacancies", + "app-page-header", + "app-back", + "app-search", + "app-vacancy-filter", + "app-button", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag" + ], + "text": "Вакансии\nвакансии\n\nПоиск\n\nфильтры\nмои отклики\nАктивна\n01.10.2026\nДизайнер интерфейсов\nПроект\nГородские проекты\n\nИщем: Разработчик\n\n100000 ₽\n\nМотивированность\n\nГлубинное интервью\n\nПроектирование пользовательского опыта\n\nЕщё +1\n\nПомогите создавать понятные интерфейсы для студенческих команд.\n\nподробне" + }, + "passed": true + }, + { + "name": "vacancy", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/1", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button" + ], + "text": "Вакансии\nВакансии\nДизайнер интерфейсов\nАктивна\nПроект: Городские проекты\n\nИщем: Разработчик\n\n100 000 ₽\nУдаленная работа\nМосква\nОписание вакансии\nПомогите создавать понятные интерфейсы для студенческих команд.\nНавыки\n\nМотивированность\n\nГлубинное интервью\n\nПроектирование пользовательского опыта\n\nFigma" + }, + "passed": true + }, + { + "name": "courses", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/all", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-page-header", + "app-back", + "app-search", + "app-list", + "app-course", + "app-badge", + "app-soon-card", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-track-career", + "app-page-header", + "app-back", + "app-search", + "app-list", + "app-course", + "app-badge" + ], + "text": "Курсы\nкурсы\n\nПоиск\n\nдоступно всем пользователям\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазвани...\n\n01.01.2026 — 01.01.2027\n\nпродолжить обучение" + }, + "passed": true + }, + { + "name": "course", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/1", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar" + ], + "text": "Курсы\nаналитика\nо курсе\nназад\nвернуться в программу\n\nпрогресс по курсу\n\n10%\n\nМодуль 1\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\n1 урок\n\n10%" + }, + "passed": true + }, + { + "name": "profile-edit", + "width": 320, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/edit", + "actualQuery": "?editingStep=main", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-page-header", + "app-back", + "app-button", + "app-project-navigation", + "app-tabs", + "app-profile-main-step", + "app-avatar-control", + "app-modal", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-profile-edit", + "app-page-header", + "app-back", + "app-button", + "app-project-navigation", + "app-tabs", + "app-profile-main-step", + "app-avatar-control", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea" + ], + "text": "Редактирование профиля\nредактирование профиля\ncохранить\nосновные данные\nобразование\nработа\nдостижения\nнавыки\nдействия\nфото\nимя\nфамилия\nРегион\nдата рождения\nспециальность\nобо мне\n\n124 / 300\n\nуказать личные контакты\nдобавить контакт\nтелефон" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 320, + "layout": { + "actions": [ + { + "left": 12, + "right": 308, + "top": 148, + "bottom": 192, + "width": 296 + }, + { + "left": 12, + "right": 308, + "top": 204, + "bottom": 248, + "width": 296 + }, + { + "left": 12, + "right": 308, + "top": 260, + "bottom": 304, + "width": 296 + } + ], + "regionFont": "16px", + "industryFont": "16px", + "date": { + "left": 12, + "right": 308, + "top": 1226.5625, + "bottom": 1274.953125, + "width": 296 + }, + "dateHint": { + "left": 256, + "right": 300, + "top": 1228.75, + "bottom": 1272.75, + "width": 44 + }, + "datePadding": 64, + "avatar": { + "left": 126, + "right": 194, + "top": 455, + "bottom": 523, + "width": 68 + }, + "avatarHint": { + "left": 197, + "right": 241, + "top": 467, + "bottom": 511, + "width": 44 + }, + "goals": [ + { + "left": 12, + "right": 308, + "top": 1937.34375, + "bottom": 1992.9375, + "width": 296 + }, + { + "left": 12, + "right": 308, + "top": 2098.328125, + "bottom": 2153.921875, + "width": 296 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nлоготип\nпрезентация\n\nПрезентации формата .PDF\nили .PPTX весом до 50МБ\n\nобложка\n\nСтандартная обложка\n\nЗагрузить файл\n1\nназ" + }, + "passed": true + }, + { + "name": "partners", + "width": 320, + "layout": { + "actions": [ + { + "left": 12, + "right": 308, + "top": 421, + "bottom": 465, + "width": 296 + }, + { + "left": 12, + "right": 308, + "top": 481, + "bottom": 525, + "width": 296 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=contacts&programLinkId=1", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-partner-resources-step", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-partner-resources-step" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nдобавить партнера\nдобавить ресурс" + }, + "passed": true + }, + { + "name": "analytics", + "width": 320, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-modal", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nназад\n\nУправление программой\n\nАналитика\n\nСводка пути участников от регистрации до экспертной оценки.\n\nВыгрузки\nВсе проекты\nСданные проекты\nОценки проектов\nУчастники\n1\nПроекты\n1\nЭксперты\n1\nКоманда\n1\nРегионы проектов\nОченьДлинноеНазваниеБезПробеловОченьДл" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 320, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 28, + "right": 292, + "top": 583.1875, + "bottom": 627.1875, + "width": 264 + }, + { + "left": 28, + "right": 292, + "top": 639.1875, + "bottom": 683.1875, + "width": 264 + } + ], + "footer": { + "left": 28, + "right": 292, + "top": 583.1875, + "bottom": 683.1875, + "width": 264 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 320, + "pageWidth": 320, + "bodyWidth": 320, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nКоманда проекта\n\nУправляйте участниками проекта, приглашайте новых и назначайте роли.\n\nПригласить участника\nУчастники ком" + }, + "passed": true + }, + { + "name": "feed", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/feed", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-vacancy-skills", + "app-tag", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-vacancy-skills", + "app-tag" + ], + "text": "Новости\nвсе новости\n88\nновости проектов\n56\nсвежие вакансии\n1\nновости сообщества\n31\nновости программ\n0\nобразование\n0\nНовая вакансия\n29.09.2026\nПроект / компания\nГородские проекты\nДизайнер интерфейсов\n\nПомогите создавать понятные интерфейсы для студенческих команд.\n\nМотивированность\n\nГлубинное интервь" + }, + "passed": true + }, + { + "name": "projects", + "width": 390, + "layout": { + "list": { + "left": 16, + "right": 374, + "top": 1558, + "bottom": 1802, + "width": 358 + }, + "card": { + "left": 65, + "right": 325, + "top": 1558, + "bottom": 1802, + "width": 260 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-project-activity-card" + ], + "text": "Проекты\nпроекты\nсоздать проект\n\nПоиск\n\nмои проекты\n\nПривязан к программе\n\nГородские проекты\n\nПрограмма: Акселератор студенческих проектов\n\nСервис для студенческих команд\n\nЛидер\n\nможно редактировать\n\nОткрыть\nпоказать раздел\n\nмои подписки\n\nГородские проекты\n\nСервис для студенческих команд\n\nОткрыть\nпок" + }, + "passed": true + }, + { + "name": "members", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/members", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-page-header", + "app-back", + "app-member-statistics-card", + "app-member-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-members", + "app-page-header", + "app-back", + "app-member-statistics-card", + "app-member-card" + ], + "text": "Участники\nучастники\nФильтры\nПерейти в профиль\nСтатистика\nВсего участников\n—\nВ проектах\n—\nВ программах\n—\nНе удалось загрузить статистику участников\nКандидат\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nРазработчик • 26 л" + }, + "passed": true + }, + { + "name": "programs", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/program/all", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-page-header", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-program", + "app-page-header", + "app-back", + "app-search", + "app-main", + "app-program-card" + ], + "text": "Программы\nпрограммы\n\nПоиск\n\nКейс-чемпионат студенческих проектов\n\nты уже участвуешь!\n\n01.10.2026 - 01.01.2027\n\nдля всей России" + }, + "passed": true + }, + { + "name": "program", + "width": 390, + "layout": { + "emptyContacts": 0 + }, + "viewport": { + "actualPath": "/office/program/1", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nоценка проектов\nаналитика\nпроекты-участники\nучастники\nматериалы\nаналитика\nорганизатор\nУчастники\n1\nПроекты\n1\nСдано\nрешений\n0\nБез проектов\n0\n0,0%\nОткрыть →\nо программе\n\nПрограмма помогает студенческим командам развивать проекты и работать с экспертами. Уч" + }, + "passed": true + }, + { + "name": "profile", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/1", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-profile-main", + "app-profile-mid-side", + "app-project-direction-card", + "app-modal", + "app-profile-left-side", + "app-profile-right-side", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-profile-main", + "app-profile-mid-side", + "app-project-direction-card", + "app-profile-left-side", + "app-profile-right-side", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Профиль\nАлексей Куделько\nподелиться профилем\nмои проекты\ncкачать CV\nредактировать\nобо мне\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nнавыки\n\nметаданные\n\n26 лет\n\nМосква\n\nРазработчик\n\nпроекты\n\nГородские проекты\n\n0 / 15" + }, + "passed": true + }, + { + "name": "project", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/projects/1", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-projects-mid-side", + "app-project-direction-card", + "app-modal", + "app-projects-left-side", + "app-projects-right-side", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-projects-mid-side", + "app-project-direction-card", + "app-projects-left-side", + "app-projects-right-side", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Профиль проекта\nГородские проекты\nрабочая зона\nчат проекта\nкоманда\nредактировать\nо проекте\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nпроблема\n\nцелевая аудитория\n\nактуальность\n\nцели\n\nпартнеры\n\nосновное\nПрограмма\nАксе" + }, + "passed": true + }, + { + "name": "vacancies", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/all", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-page-header", + "app-back", + "app-search", + "app-vacancy-filter", + "app-button", + "app-checkbox", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-vacancies", + "app-page-header", + "app-back", + "app-search", + "app-vacancy-filter", + "app-button", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag" + ], + "text": "Вакансии\nвакансии\n\nПоиск\n\nфильтры\nмои отклики\nАктивна\n01.10.2026\nДизайнер интерфейсов\nПроект\nГородские проекты\n\nИщем: Разработчик\n\n100000 ₽\n\nМотивированность\n\nГлубинное интервью\n\nПроектирование пользовательского опыта\n\nЕщё +1\n\nПомогите создавать понятные интерфейсы для студенческих команд.\n\nподробне" + }, + "passed": true + }, + { + "name": "vacancy", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/1", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button" + ], + "text": "Вакансии\nВакансии\nДизайнер интерфейсов\nАктивна\nПроект: Городские проекты\n\nИщем: Разработчик\n\n100 000 ₽\nУдаленная работа\nМосква\nОписание вакансии\nПомогите создавать понятные интерфейсы для студенческих команд.\nНавыки\n\nМотивированность\n\nГлубинное интервью\n\nПроектирование пользовательского опыта\n\nFigma" + }, + "passed": true + }, + { + "name": "courses", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/all", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-page-header", + "app-back", + "app-search", + "app-list", + "app-course", + "app-badge", + "app-soon-card", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-track-career", + "app-page-header", + "app-back", + "app-search", + "app-list", + "app-course", + "app-badge" + ], + "text": "Курсы\nкурсы\n\nПоиск\n\nдоступно всем пользователям\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазвани...\n\n01.01.2026 — 01.01.2027\n\nпродолжить обучение" + }, + "passed": true + }, + { + "name": "course", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/1", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar" + ], + "text": "Курсы\nаналитика\nо курсе\nназад\nвернуться в программу\n\nпрогресс по курсу\n\n10%\n\nМодуль 1\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\n1 урок\n\n10%" + }, + "passed": true + }, + { + "name": "profile-edit", + "width": 390, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/edit", + "actualQuery": "?editingStep=main", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-page-header", + "app-back", + "app-button", + "app-project-navigation", + "app-tabs", + "app-profile-main-step", + "app-avatar-control", + "app-modal", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-profile-edit", + "app-page-header", + "app-back", + "app-button", + "app-project-navigation", + "app-tabs", + "app-profile-main-step", + "app-avatar-control", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea" + ], + "text": "Редактирование профиля\nредактирование профиля\ncохранить\nосновные данные\nобразование\nработа\nдостижения\nнавыки\nдействия\nфото\nимя\nфамилия\nРегион\nдата рождения\nспециальность\nобо мне\n\n124 / 300\n\nуказать личные контакты\nдобавить контакт\nтелефон" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 390, + "layout": { + "actions": [ + { + "left": 16, + "right": 374, + "top": 148, + "bottom": 192, + "width": 358 + }, + { + "left": 16, + "right": 374, + "top": 204, + "bottom": 248, + "width": 358 + }, + { + "left": 16, + "right": 374, + "top": 260, + "bottom": 304, + "width": 358 + } + ], + "regionFont": "16px", + "industryFont": "16px", + "date": { + "left": 16, + "right": 374, + "top": 1226.5625, + "bottom": 1274.953125, + "width": 358 + }, + "dateHint": { + "left": 322, + "right": 366, + "top": 1228.75, + "bottom": 1272.75, + "width": 44 + }, + "datePadding": 64, + "avatar": { + "left": 161, + "right": 229, + "top": 455, + "bottom": 523, + "width": 68 + }, + "avatarHint": { + "left": 232, + "right": 276, + "top": 467, + "bottom": 511, + "width": 44 + }, + "goals": [ + { + "left": 16, + "right": 374, + "top": 1871.34375, + "bottom": 1915.34375, + "width": 358 + }, + { + "left": 16, + "right": 374, + "top": 2020.734375, + "bottom": 2064.734375, + "width": 358 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nлоготип\nпрезентация\n\nПрезентации формата .PDF\nили .PPTX весом до 50МБ\n\nобложка\n\nСтандартная обложка\n\nЗагрузить файл\n1\nназ" + }, + "passed": true + }, + { + "name": "partners", + "width": 390, + "layout": { + "actions": [ + { + "left": 16, + "right": 374, + "top": 421, + "bottom": 465, + "width": 358 + }, + { + "left": 16, + "right": 374, + "top": 481, + "bottom": 525, + "width": 358 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=contacts&programLinkId=1", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-partner-resources-step", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-partner-resources-step" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nдобавить партнера\nдобавить ресурс" + }, + "passed": true + }, + { + "name": "analytics", + "width": 390, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-modal", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nназад\n\nУправление программой\n\nАналитика\n\nСводка пути участников от регистрации до экспертной оценки.\n\nВыгрузки\nВсе проекты\nСданные проекты\nОценки проектов\nУчастники\n1\nПроекты\n1\nЭксперты\n1\nКоманда\n1\nРегионы проектов\nОченьДлинноеНазваниеБезПробеловОченьДл" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 390, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 28, + "right": 362, + "top": 554.59375, + "bottom": 598.59375, + "width": 334 + }, + { + "left": 28, + "right": 362, + "top": 610.59375, + "bottom": 654.59375, + "width": 334 + } + ], + "footer": { + "left": 28, + "right": 362, + "top": 554.59375, + "bottom": 654.59375, + "width": 334 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 390, + "pageWidth": 390, + "bodyWidth": 390, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nКоманда проекта\n\nУправляйте участниками проекта, приглашайте новых и назначайте роли.\n\nПригласить участника\nУчастники ком" + }, + "passed": true + }, + { + "name": "feed", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/feed", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-vacancy-skills", + "app-tag", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-vacancy-skills", + "app-tag" + ], + "text": "Новости\nвсе новости\n88\nновости проектов\n56\nсвежие вакансии\n1\nновости сообщества\n31\nновости программ\n0\nобразование\n0\nНовая вакансия\n29.09.2026\nПроект / компания\nГородские проекты\nДизайнер интерфейсов\n\nПомогите создавать понятные интерфейсы для студенческих команд.\n\nМотивированность\n\nГлубинное интервь" + }, + "passed": true + }, + { + "name": "projects", + "width": 768, + "layout": { + "list": { + "left": 16, + "right": 737, + "top": 1524.34375, + "bottom": 1768.34375, + "width": 721 + }, + "card": { + "left": 246.5, + "right": 506.5, + "top": 1524.34375, + "bottom": 1768.34375, + "width": 260 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-projects", + "app-page-header", + "app-back", + "app-button", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-project-activity-card" + ], + "text": "Проекты\nпроекты\nсоздать проект\n\nПоиск\n\nмои проекты\n\nПривязан к программе\n\nГородские проекты\n\nПрограмма: Акселератор студенческих проектов\n\nСервис для студенческих команд\n\nЛидер\n\nможно редактировать\n\nОткрыть\nпоказать раздел\n\nмои подписки\n\nГородские проекты\n\nСервис для студенческих команд\n\nОткрыть\nпок" + }, + "passed": true + }, + { + "name": "members", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/members", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-page-header", + "app-back", + "app-member-statistics-card", + "app-member-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-members", + "app-page-header", + "app-back", + "app-member-statistics-card", + "app-member-card" + ], + "text": "Участники\nучастники\nФильтры\nПерейти в профиль\nСтатистика\nВсего участников\n—\nВ проектах\n—\nВ программах\n—\nНе удалось загрузить статистику участников\nКандидат\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nРазработчик • 26 л" + }, + "passed": true + }, + { + "name": "programs", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/program/all", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-page-header", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-program", + "app-page-header", + "app-back", + "app-search", + "app-main", + "app-program-card" + ], + "text": "Программы\nпрограммы\n\nПоиск\n\nКейс-чемпионат студенческих проектов\n\nты уже участвуешь!\n\n01.10.2026 - 01.01.2027\n\nдля всей России" + }, + "passed": true + }, + { + "name": "program", + "width": 768, + "layout": { + "emptyContacts": 0 + }, + "viewport": { + "actualPath": "/office/program/1", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nоценка проектов\nаналитика\nпроекты-участники\nучастники\nматериалы\nаналитика\nорганизатор\nУчастники\n1\nПроекты\n1\nСдано\nрешений\n0\nБез проектов\n0\n0,0%\nОткрыть →\nо программе\n\nПрограмма помогает студенческим командам развивать проекты и работать с экспертами. Уч" + }, + "passed": true + }, + { + "name": "profile", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/1", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-profile-main", + "app-profile-mid-side", + "app-project-direction-card", + "app-modal", + "app-profile-left-side", + "app-profile-right-side", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-profile-main", + "app-profile-mid-side", + "app-project-direction-card", + "app-profile-left-side", + "app-profile-right-side", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Профиль\nАлексей Куделько\nподелиться профилем\nмои проекты\ncкачать CV\nредактировать\nобо мне\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nнавыки\n\nметаданные\n\n26 лет\n\nМосква\n\nРазработчик\n\nпроекты\n\nГородские проекты\n\n0 / 15" + }, + "passed": true + }, + { + "name": "project", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/projects/1", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-projects-mid-side", + "app-project-direction-card", + "app-modal", + "app-projects-left-side", + "app-projects-right-side", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-projects-mid-side", + "app-project-direction-card", + "app-projects-left-side", + "app-projects-right-side", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "Профиль проекта\nГородские проекты\nрабочая зона\nчат проекта\nкоманда\nредактировать\nо проекте\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\nпроблема\n\nцелевая аудитория\n\nактуальность\n\nцели\n\nпартнеры\n\nосновное\nПрограмма\nАксе" + }, + "passed": true + }, + { + "name": "vacancies", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/all", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-page-header", + "app-back", + "app-search", + "app-vacancy-filter", + "app-button", + "app-checkbox", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-vacancies", + "app-page-header", + "app-back", + "app-search", + "app-vacancy-filter", + "app-button", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag" + ], + "text": "Вакансии\nвакансии\n\nПоиск\n\nфильтры\nмои отклики\nАктивна\n01.10.2026\nДизайнер интерфейсов\nПроект\nГородские проекты\n\nИщем: Разработчик\n\n100000 ₽\n\nМотивированность\n\nГлубинное интервью\n\nПроектирование пользовательского опыта\n\nЕщё +1\n\nПомогите создавать понятные интерфейсы для студенческих команд.\n\nподробне" + }, + "passed": true + }, + { + "name": "vacancy", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/1", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button" + ], + "text": "Вакансии\nВакансии\nДизайнер интерфейсов\nАктивна\nПроект: Городские проекты\n\nИщем: Разработчик\n\n100 000 ₽\nУдаленная работа\nМосква\nОписание вакансии\nПомогите создавать понятные интерфейсы для студенческих команд.\nНавыки\n\nМотивированность\n\nГлубинное интервью\n\nПроектирование пользовательского опыта\n\nFigma" + }, + "passed": true + }, + { + "name": "courses", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/all", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-page-header", + "app-back", + "app-search", + "app-list", + "app-course", + "app-badge", + "app-soon-card", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-track-career", + "app-page-header", + "app-back", + "app-search", + "app-list", + "app-course", + "app-badge" + ], + "text": "Курсы\nкурсы\n\nПоиск\n\nдоступно всем пользователям\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазвани...\n\n01.01.2026 — 01.01.2027\n\nпродолжить обучение" + }, + "passed": true + }, + { + "name": "course", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/1", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar" + ], + "text": "Курсы\nаналитика\nо курсе\nназад\nвернуться в программу\n\nпрогресс по курсу\n\n10%\n\nМодуль 1\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробелов\n\n1 урок\n\n10%" + }, + "passed": true + }, + { + "name": "profile-edit", + "width": 768, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/edit", + "actualQuery": "?editingStep=main", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-page-header", + "app-back", + "app-button", + "app-project-navigation", + "app-tabs", + "app-profile-main-step", + "app-avatar-control", + "app-modal", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-profile-edit", + "app-page-header", + "app-back", + "app-button", + "app-project-navigation", + "app-tabs", + "app-profile-main-step", + "app-avatar-control", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea" + ], + "text": "Редактирование профиля\nредактирование профиля\ncохранить\nосновные данные\nобразование\nработа\nдостижения\nнавыки\nдействия\nфото\nимя\nфамилия\nРегион\nдата рождения\nспециальность\nобо мне\n\n124 / 300\n\nуказать личные контакты\nдобавить контакт\nтелефон" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 768, + "layout": { + "actions": [ + { + "left": 16, + "right": 737, + "top": 148, + "bottom": 192, + "width": 721 + }, + { + "left": 16, + "right": 737, + "top": 204, + "bottom": 248, + "width": 721 + }, + { + "left": 16, + "right": 737, + "top": 260, + "bottom": 304, + "width": 721 + } + ], + "regionFont": "14px", + "industryFont": "14px", + "date": { + "left": 384.5, + "right": 737, + "top": 696.59375, + "bottom": 742.1875, + "width": 352.5 + }, + "dateHint": { + "left": 685, + "right": 729, + "top": 697.390625, + "bottom": 741.390625, + "width": 44 + }, + "datePadding": 64, + "avatar": { + "left": 24, + "right": 92, + "top": 477, + "bottom": 545, + "width": 68 + }, + "avatarHint": { + "left": 95, + "right": 139, + "top": 489, + "bottom": 533, + "width": 44 + }, + "goals": [ + { + "left": 16, + "right": 737, + "top": 1114.78125, + "bottom": 1158.78125, + "width": 721 + }, + { + "left": 16, + "right": 737, + "top": 1261.375, + "bottom": 1305.375, + "width": 721 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nлоготип\nпрезентация\n\nПрезентации формата .PDF\nили .PPTX весом до 50МБ\n\nобложка\n\nСтандартная обложка\n\nЗагрузить файл\n1\nназ" + }, + "passed": true + }, + { + "name": "partners", + "width": 768, + "layout": { + "actions": [ + { + "left": 16, + "right": 737, + "top": 421, + "bottom": 465, + "width": 721 + }, + { + "left": 16, + "right": 737, + "top": 481, + "bottom": 525, + "width": 721 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=contacts&programLinkId=1", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-partner-resources-step", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-partner-resources-step" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nдобавить партнера\nдобавить ресурс" + }, + "passed": true + }, + { + "name": "analytics", + "width": 768, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-page-header", + "app-button", + "app-modal", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-detail", + "app-page-header", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "Программы\nКейс-чемпионат студенческих проектов\nназад\n\nУправление программой\n\nАналитика\n\nСводка пути участников от регистрации до экспертной оценки.\n\nВыгрузки\nВсе проекты\nСданные проекты\nОценки проектов\nУчастники\n1\nПроекты\n1\nЭксперты\n1\nКоманда\n1\nРегионы проектов\nОченьДлинноеНазваниеБезПробеловОченьДл" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 768, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 120.5, + "right": 632.5, + "top": 574.09375, + "bottom": 600.09375, + "width": 512 + }, + { + "left": 120.5, + "right": 632.5, + "top": 612.09375, + "bottom": 638.09375, + "width": 512 + } + ], + "footer": { + "left": 120.5, + "right": 632.5, + "top": 574.09375, + "bottom": 638.09375, + "width": 512 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 768, + "pageWidth": 753, + "bodyWidth": 753, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-avatar", + "app-edit", + "app-button", + "app-project-navigation", + "app-tabs", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "Редактирование проекта\nредактировать проект\nсохранить черновик\nотправить заявку\nудалить проект\nосновные данные\nпартнеры и ресурсы\nдостижения\nвакансии\nкоманда\nданные для конкурсов\nКоманда проекта\n\nУправляйте участниками проекта, приглашайте новых и назначайте роли.\n\nПригласить участника\nУчастники ком" + }, + "passed": true + }, + { + "name": "feed", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/feed", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nвсе новости\n88\nновости проектов\n56\nсвежие вакансии\n1\nновости сообщества\n31\nновости прогр" + }, + "passed": true + }, + { + "name": "projects", + "width": 1000, + "layout": { + "list": { + "left": 778, + "right": 935, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + }, + "card": { + "left": 778, + "right": 935, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-button", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-button", + "app-project-activity-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпроекты\n\nПоиск\n\nмои проекты\n\nВ программе\n\nГородские проекты\n\nСервис для студенческих ком" + }, + "passed": true + }, + { + "name": "members", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/members", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-back", + "app-search", + "app-member-card", + "app-button", + "app-members-filters", + "app-autocomplete-input", + "app-member-statistics-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-back", + "app-search", + "app-member-card", + "app-button", + "app-members-filters", + "app-autocomplete-input", + "app-member-statistics-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nучастники\n\nПоиск\n\nКандидат\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробело" + }, + "passed": true + }, + { + "name": "programs", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/program/all", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпрограммы\n\nПоиск\n\nКейс-чемпионат студенческих проектов\n\nты уже участвуешь!\n\n01.10.2026\n\n" + }, + "passed": true + }, + { + "name": "program", + "width": 1000, + "layout": { + "emptyContacts": 0 + }, + "viewport": { + "actualPath": "/office/program/1", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-main", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-main", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\nо программе\n\nПрограмма помогает ст" + }, + "passed": true + }, + { + "name": "profile", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/1", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-profile-main", + "app-profile-left-side", + "app-profile-mid-side", + "app-project-direction-card", + "app-modal", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-profile-right-side", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-profile-main", + "app-profile-left-side", + "app-profile-mid-side", + "app-project-direction-card", + "app-news-form", + "app-textarea", + "app-news-card", + "app-profile-right-side" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nАлексей Куделько\nподелиться профилем\nмои проекты\ncкачать CV\nредактировать\nметаданные\n\n26" + }, + "passed": true + }, + { + "name": "project", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/projects/1", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-projects-left-side", + "app-projects-mid-side", + "app-news-form", + "app-textarea", + "app-project-direction-card", + "app-modal", + "app-news-card", + "app-carousel", + "app-projects-right-side", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-projects-left-side", + "app-projects-mid-side", + "app-news-form", + "app-textarea", + "app-project-direction-card", + "app-news-card", + "app-projects-right-side" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nГородские проекты\nрабочая зона\nчат проекта\nкоманда\nредактировать\nосновное\nСфера\n\nИнформа" + }, + "passed": true + }, + { + "name": "vacancies", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/all", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-back", + "app-search", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-button", + "app-vacancy-filter", + "app-checkbox", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-back", + "app-search", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-button", + "app-vacancy-filter", + "app-checkbox" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nвакансии\n\nПоиск\n\nАктивна\n01.10.2026\nДизайнер интерфейсов\nПроект\nГородские проекты\n\nИщем:" + }, + "passed": true + }, + { + "name": "vacancy", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/1", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nВакансии\nДизайнер интерфейсов\nАктивна\nПроект: Городские проекты\n\nИщем: Разработчик\n\n100 " + }, + "passed": true + }, + { + "name": "courses", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/all", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-back", + "app-search", + "app-list", + "app-course", + "app-button", + "app-soon-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-back", + "app-search", + "app-list", + "app-course", + "app-soon-card", + "app-button" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nкурсы\n\nПоиск\n\nдоступно всем пользователям\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНа" + }, + "passed": true + }, + { + "name": "course", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/1", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-course-module-card", + "app-circle-progress-bar" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПро" + }, + "passed": true + }, + { + "name": "profile-edit", + "width": 1000, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/edit", + "actualQuery": "?editingStep=main", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-button", + "app-project-navigation", + "app-profile-main-step", + "app-avatar-control", + "app-modal", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-button", + "app-project-navigation", + "app-profile-main-step", + "app-avatar-control", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактирование профиля\ncохранить\n\nосновные данные\n\nобразование\n\nработа\n\nдостижения\n\nнавы" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 1000, + "layout": { + "actions": [ + { + "left": 444, + "right": 601, + "top": 89.203125, + "bottom": 114.796875, + "width": 157 + }, + { + "left": 611, + "right": 768, + "top": 89.203125, + "bottom": 114.796875, + "width": 157 + }, + { + "left": 778, + "right": 935, + "top": 89.203125, + "bottom": 114.796875, + "width": 157 + } + ], + "regionFont": "12px", + "industryFont": "12px", + "date": { + "left": 865, + "right": 935, + "top": 428.78125, + "bottom": 470.375, + "width": 70 + }, + "dateHint": { + "left": 918, + "right": 938, + "top": 422.015625, + "bottom": 448.015625, + "width": 20 + }, + "datePadding": 0, + "avatar": { + "left": 197.5, + "right": 265.5, + "top": 287.1875, + "bottom": 355.1875, + "width": 68 + }, + "avatarHint": { + "left": 253.5, + "right": 269.5, + "top": 287.078125, + "bottom": 309.078125, + "width": 16 + }, + "goals": [ + { + "left": 197.5, + "right": 935, + "top": 976.34375, + "bottom": 1001.9375, + "width": 737.5 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "partners", + "width": 1000, + "layout": { + "actions": [ + { + "left": 197.5, + "right": 521.25, + "top": 249.59375, + "bottom": 275.1875, + "width": 323.75 + }, + { + "left": 611.25, + "right": 935, + "top": 249.59375, + "bottom": 275.1875, + "width": 323.75 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=contacts&programLinkId=1", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-partner-resources-step", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-partner-resources-step" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "analytics", + "width": 1000, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\n\nУправление программой\n\nАналитика\n" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 1000, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 248, + "right": 388, + "top": 592.296875, + "bottom": 618.296875, + "width": 140 + }, + { + "left": 400, + "right": 608, + "top": 592.296875, + "bottom": 618.296875, + "width": 208 + } + ], + "footer": { + "left": 248, + "right": 752, + "top": 592.296875, + "bottom": 618.296875, + "width": 504 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 1000, + "pageWidth": 985, + "bodyWidth": 985, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "feed", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/feed", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nвсе новости\n88\nновости проектов\n56\nсвежие вакансии\n1\nновости сообщества\n31\nновости прогр" + }, + "passed": true + }, + { + "name": "projects", + "width": 1440, + "layout": { + "list": { + "left": 1075.484375, + "right": 1232.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + }, + "card": { + "left": 1075.484375, + "right": 1232.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-button", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-button", + "app-project-activity-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпроекты\n\nПоиск\n\nмои проекты\n\nВ программе\n\nГородские проекты\n\nСервис для студенческих ком" + }, + "passed": true + }, + { + "name": "members", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/members", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-back", + "app-search", + "app-member-card", + "app-button", + "app-members-filters", + "app-autocomplete-input", + "app-member-statistics-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-back", + "app-search", + "app-member-card", + "app-button", + "app-members-filters", + "app-autocomplete-input", + "app-member-statistics-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nучастники\n\nПоиск\n\nКандидат\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробело" + }, + "passed": true + }, + { + "name": "programs", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/program/all", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпрограммы\n\nПоиск\n\nКейс-чемпионат студенческих проектов\n\nты уже участвуешь!\n\n01.10.2026\n\n" + }, + "passed": true + }, + { + "name": "program", + "width": 1440, + "layout": { + "emptyContacts": 0 + }, + "viewport": { + "actualPath": "/office/program/1", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\nаналитика\nорганизатор\nУчастники\n1\n" + }, + "passed": true + }, + { + "name": "profile", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/1", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-profile-main", + "app-profile-left-side", + "app-profile-mid-side", + "app-project-direction-card", + "app-modal", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-profile-right-side", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-profile-main", + "app-profile-left-side", + "app-profile-mid-side", + "app-project-direction-card", + "app-news-form", + "app-textarea", + "app-news-card", + "app-profile-right-side" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nАлексей Куделько\nподелиться профилем\nмои проекты\ncкачать CV\nредактировать\nметаданные\n\n26" + }, + "passed": true + }, + { + "name": "project", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/projects/1", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-projects-left-side", + "app-projects-mid-side", + "app-news-form", + "app-textarea", + "app-project-direction-card", + "app-modal", + "app-news-card", + "app-carousel", + "app-projects-right-side", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-projects-left-side", + "app-projects-mid-side", + "app-news-form", + "app-textarea", + "app-project-direction-card", + "app-news-card", + "app-projects-right-side" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nГородские проекты\nрабочая зона\nчат проекта\nкоманда\nредактировать\nосновное\nСфера\n\nИнформа" + }, + "passed": true + }, + { + "name": "vacancies", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/all", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-back", + "app-search", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-button", + "app-vacancy-filter", + "app-checkbox", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-back", + "app-search", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-button", + "app-vacancy-filter", + "app-checkbox" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nвакансии\n\nПоиск\n\nАктивна\n01.10.2026\nДизайнер интерфейсов\nПроект\nГородские проекты\n\nИщем:" + }, + "passed": true + }, + { + "name": "vacancy", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/1", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nВакансии\nДизайнер интерфейсов\nАктивна\nПроект: Городские проекты\n\nИщем: Разработчик\n\n100 " + }, + "passed": true + }, + { + "name": "courses", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/all", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-back", + "app-search", + "app-list", + "app-course", + "app-button", + "app-soon-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-back", + "app-search", + "app-list", + "app-course", + "app-soon-card", + "app-button" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nкурсы\n\nПоиск\n\nдоступно всем пользователям\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНа" + }, + "passed": true + }, + { + "name": "course", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/1", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-soon-card", + "app-course-module-card", + "app-circle-progress-bar", + "app-course-about", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-soon-card", + "app-course-module-card", + "app-circle-progress-bar", + "app-course-about" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПро" + }, + "passed": true + }, + { + "name": "profile-edit", + "width": 1440, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/edit", + "actualQuery": "?editingStep=main", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-button", + "app-project-navigation", + "app-profile-main-step", + "app-avatar-control", + "app-modal", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-button", + "app-project-navigation", + "app-profile-main-step", + "app-avatar-control", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактирование профиля\ncохранить\n\nосновные данные\n\nобразование\n\nработа\n\nдостижения\n\nнавы" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 1440, + "layout": { + "actions": [ + { + "left": 733.71875, + "right": 890.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 900.71875, + "right": 1057.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 1067.71875, + "right": 1224.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + } + ], + "regionFont": "12px", + "industryFont": "12px", + "date": { + "left": 1156.90625, + "right": 1226.90625, + "top": 401.78125, + "bottom": 443.375, + "width": 70 + }, + "dateHint": { + "left": 1209.90625, + "right": 1229.90625, + "top": 395.015625, + "bottom": 421.015625, + "width": 20 + }, + "datePadding": 0, + "avatar": { + "left": 365.828125, + "right": 433.828125, + "top": 260.1875, + "bottom": 328.1875, + "width": 68 + }, + "avatarHint": { + "left": 421.828125, + "right": 437.828125, + "top": 260.078125, + "bottom": 282.078125, + "width": 16 + }, + "goals": [ + { + "left": 365.828125, + "right": 1232.484375, + "top": 934.15625, + "bottom": 959.75, + "width": 866.65625 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "partners", + "width": 1440, + "layout": { + "actions": [ + { + "left": 365.828125, + "right": 754.15625, + "top": 222.59375, + "bottom": 248.1875, + "width": 388.328125 + }, + { + "left": 844.15625, + "right": 1232.484375, + "top": 222.59375, + "bottom": 248.1875, + "width": 388.328125 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=contacts&programLinkId=1", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-partner-resources-step", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-partner-resources-step" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "analytics", + "width": 1440, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\n\nУправление программой\n\nАналитика\n" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 1440, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 468, + "right": 608, + "top": 592.296875, + "bottom": 618.296875, + "width": 140 + }, + { + "left": 620, + "right": 828, + "top": 592.296875, + "bottom": 618.296875, + "width": 208 + } + ], + "footer": { + "left": 468, + "right": 972, + "top": 592.296875, + "bottom": 618.296875, + "width": 504 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 1440, + "pageWidth": 1425, + "bodyWidth": 1425, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "feed", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/feed", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-feed", + "app-feed-filter", + "app-open-vacancy" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nвсе новости\n88\nновости проектов\n56\nсвежие вакансии\n1\nновости сообщества\n31\nновости прогр" + }, + "passed": true + }, + { + "name": "projects", + "width": 1920, + "layout": { + "list": { + "left": 1315.484375, + "right": 1472.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + }, + "card": { + "left": 1315.484375, + "right": 1472.484375, + "top": 266.1875, + "bottom": 446.1875, + "width": 157 + } + }, + "viewport": { + "actualPath": "/office/projects/dashboard", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-modal", + "app-button", + "app-project-activity-card", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-projects", + "app-back", + "app-search", + "app-dashboard", + "app-dashboard-item", + "app-info-card", + "app-button", + "app-project-activity-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпроекты\n\nПоиск\n\nмои проекты\n\nВ программе\n\nГородские проекты\n\nСервис для студенческих ком" + }, + "passed": true + }, + { + "name": "members", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/members", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-back", + "app-search", + "app-member-card", + "app-button", + "app-members-filters", + "app-autocomplete-input", + "app-member-statistics-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-members", + "app-back", + "app-search", + "app-member-card", + "app-button", + "app-members-filters", + "app-autocomplete-input", + "app-member-statistics-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nучастники\n\nПоиск\n\nКандидат\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробело" + }, + "passed": true + }, + { + "name": "programs", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/program/all", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-program", + "app-back", + "app-search", + "app-main", + "app-program-card", + "app-checkbox", + "app-select" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nпрограммы\n\nПоиск\n\nКейс-чемпионат студенческих проектов\n\nты уже участвуешь!\n\n01.10.2026\n\n" + }, + "passed": true + }, + { + "name": "program", + "width": 1920, + "layout": { + "emptyContacts": 0 + }, + "viewport": { + "actualPath": "/office/program/1", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-main", + "app-program-role-widget", + "app-news-form", + "app-textarea", + "app-news-card" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\nаналитика\nорганизатор\nУчастники\n1\n" + }, + "passed": true + }, + { + "name": "profile", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/1", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-profile-main", + "app-profile-left-side", + "app-profile-mid-side", + "app-project-direction-card", + "app-modal", + "app-news-form", + "app-textarea", + "app-news-card", + "app-carousel", + "app-profile-right-side", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-profile-main", + "app-profile-left-side", + "app-profile-mid-side", + "app-project-direction-card", + "app-news-form", + "app-textarea", + "app-news-card", + "app-profile-right-side" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nАлексей Куделько\nподелиться профилем\nмои проекты\ncкачать CV\nредактировать\nметаданные\n\n26" + }, + "passed": true + }, + { + "name": "project", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/projects/1", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-projects-left-side", + "app-projects-mid-side", + "app-news-form", + "app-textarea", + "app-project-direction-card", + "app-modal", + "app-news-card", + "app-carousel", + "app-projects-right-side", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-projects-left-side", + "app-projects-mid-side", + "app-news-form", + "app-textarea", + "app-project-direction-card", + "app-news-card", + "app-projects-right-side" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nГородские проекты\nрабочая зона\nчат проекта\nкоманда\nредактировать\nосновное\nСфера\n\nИнформа" + }, + "passed": true + }, + { + "name": "vacancies", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/all", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-back", + "app-search", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-button", + "app-vacancy-filter", + "app-checkbox", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies", + "app-back", + "app-search", + "app-vacancies-list", + "app-project-vacancy-card", + "app-vacancy-status", + "app-badge", + "app-vacancy-skills", + "app-tag", + "app-button", + "app-vacancy-filter", + "app-checkbox" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nвакансии\n\nПоиск\n\nАктивна\n01.10.2026\nДизайнер интерфейсов\nПроект\nГородские проекты\n\nИщем:" + }, + "passed": true + }, + { + "name": "vacancy", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/vacancies/1", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-vacancies-detail", + "app-back", + "app-vacancy-status", + "app-badge", + "app-detail", + "app-vacancies-left-side", + "app-vacancy-skills", + "app-tag", + "app-vacancies-right-side", + "app-button" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nВакансии\nДизайнер интерфейсов\nАктивна\nПроект: Городские проекты\n\nИщем: Разработчик\n\n100 " + }, + "passed": true + }, + { + "name": "courses", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/all", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-back", + "app-search", + "app-list", + "app-course", + "app-button", + "app-soon-card", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-track-career", + "app-back", + "app-search", + "app-list", + "app-course", + "app-soon-card", + "app-button" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nкурсы\n\nПоиск\n\nдоступно всем пользователям\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНа" + }, + "passed": true + }, + { + "name": "course", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/courses/1", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-soon-card", + "app-course-module-card", + "app-circle-progress-bar", + "app-course-about", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-course-detail", + "app-button", + "app-detail", + "app-soon-card", + "app-course-module-card", + "app-circle-progress-bar", + "app-course-about" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПробеловОченьДлинноеНазваниеБезПро" + }, + "passed": true + }, + { + "name": "profile-edit", + "width": 1920, + "layout": {}, + "viewport": { + "actualPath": "/office/profile/edit", + "actualQuery": "?editingStep=main", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-button", + "app-project-navigation", + "app-profile-main-step", + "app-avatar-control", + "app-modal", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-profile-edit", + "app-button", + "app-project-navigation", + "app-profile-main-step", + "app-avatar-control", + "app-input", + "app-region-select", + "app-autocomplete-input", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактирование профиля\ncохранить\n\nосновные данные\n\nобразование\n\nработа\n\nдостижения\n\nнавы" + }, + "passed": true + }, + { + "name": "project-edit", + "width": 1920, + "layout": { + "actions": [ + { + "left": 973.71875, + "right": 1130.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 1140.71875, + "right": 1297.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + }, + { + "left": 1307.71875, + "right": 1464.71875, + "top": 75.703125, + "bottom": 101.296875, + "width": 157 + } + ], + "regionFont": "12px", + "industryFont": "12px", + "date": { + "left": 1396.90625, + "right": 1466.90625, + "top": 401.78125, + "bottom": 443.375, + "width": 70 + }, + "dateHint": { + "left": 1449.90625, + "right": 1469.90625, + "top": 395.015625, + "bottom": 421.015625, + "width": 20 + }, + "datePadding": 0, + "avatar": { + "left": 605.828125, + "right": 673.828125, + "top": 260.1875, + "bottom": 328.1875, + "width": 68 + }, + "avatarHint": { + "left": 661.828125, + "right": 677.828125, + "top": 260.078125, + "bottom": 282.078125, + "width": 16 + }, + "goals": [ + { + "left": 605.828125, + "right": 1472.484375, + "top": 934.15625, + "bottom": 959.75, + "width": 866.65625 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=main&programLinkId=1", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-modal", + "app-upload-file", + "app-select", + "app-dropdown", + "app-input", + "app-region-select", + "app-textarea", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-main-step", + "app-avatar-control", + "app-tooltip", + "app-upload-file", + "app-select", + "app-input", + "app-region-select", + "app-textarea" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "partners", + "width": 1920, + "layout": { + "actions": [ + { + "left": 605.828125, + "right": 994.15625, + "top": 222.59375, + "bottom": 248.1875, + "width": 388.328125 + }, + { + "left": 1084.15625, + "right": 1472.484375, + "top": 222.59375, + "bottom": 248.1875, + "width": 388.328125 + } + ] + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=contacts&programLinkId=1", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-partner-resources-step", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-partner-resources-step" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + }, + { + "name": "analytics", + "width": 1920, + "layout": { + "backgrounds": [ + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)", + "rgba(0, 0, 0, 0)" + ] + }, + "viewport": { + "actualPath": "/office/program/1/analytics", + "actualQuery": "", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip", + "app-analytics-drilldown", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-detail", + "app-button", + "app-program-analytics", + "app-tooltip" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nоценка проектов\nаналитика\nпроекты-участники\nучастники\n\nУправление программой\n\nАналитика\n" + }, + "passed": true + }, + { + "name": "team-invite", + "width": 1920, + "layout": { + "inputBorder": "0px", + "inputShadow": "none", + "inputOutline": "none", + "actions": [ + { + "left": 708, + "right": 848, + "top": 592.296875, + "bottom": 618.296875, + "width": 140 + }, + { + "left": 860, + "right": 1068, + "top": 592.296875, + "bottom": 618.296875, + "width": 208 + } + ], + "footer": { + "left": 708, + "right": 1212, + "top": 592.296875, + "bottom": 618.296875, + "width": 504 + } + }, + "viewport": { + "actualPath": "/office/projects/1/edit", + "actualQuery": "?editingStep=team&programLinkId=1", + "viewport": 1920, + "pageWidth": 1905, + "bodyWidth": 1905, + "overflows": [], + "rendered": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-nav", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-project-member-invite-modal", + "app-project-invite-dialog", + "app-modal", + "app-delete-confirm", + "app-snackbar", + "app-cookie-consent", + "app-participant-picker", + "app-project-invite-role-input" + ], + "visibleApps": [ + "app-root", + "app-office", + "app-program-sidebar-card", + "app-avatar", + "app-profile-control-panel", + "app-profile-info", + "app-edit", + "app-button", + "app-project-navigation", + "app-project-team-step", + "app-collaborator-card", + "app-participant-picker", + "app-project-invite-role-input" + ], + "text": "мой профиль\nновости\nпроекты\nучастники\nпрограммы\nвакансии\nкурсы\n\nПлатформа создана компанией ООО «Молодежный форсайт»\n\nПолитика обработки персональных данных\n\n2026\n\nдо 01.01.27\n\nКейс-чемпионат студенческих пр...\n\nредактировать проект\nудалить проект\nсохранить черновик\nотправить заявку\n\nосновные данные" + }, + "passed": true + } +] diff --git a/docs/mobile-production/layout-regression.cjs b/docs/mobile-production/layout-regression.cjs new file mode 100644 index 000000000..1773aab77 --- /dev/null +++ b/docs/mobile-production/layout-regression.cjs @@ -0,0 +1,282 @@ +/** @format */ + +// Production-layout regressions use synthetic API data; no live mutations are sent. +const fs = require("node:fs"); +const path = require("node:path"); +const assert = require("node:assert/strict"); +const fixtures = require("./mobile-fixtures.cjs"); +const { launch, assertViewport } = require("./browser-harness.cjs"); +const preview = require("./preview.cjs"); +const [phase = "verified", widthsText = "320,390,768", outputText] = process.argv.slice(2); +const output = path.resolve(outputText || ".release-mobile/layout-regression"); +const baseUrl = "http://127.0.0.1:4473"; +const original = fixtures.response; +let role = "organizer"; +let notificationMode = "empty"; +let read = false; +const notification = { + id: 1, + type: "project_invite_created", + category: "project", + title: "Приглашение в проект", + message: "Команда приглашает вас присоединиться", + actor: null, + imageUrl: null, + actionUrl: "/office/projects/dashboard", + readAt: null, + createdAt: "2026-10-01T12:00:00Z", +}; +fixtures.response = (endpoint, method, query, state) => { + if (/\/notifications\/unread-count\/$/.test(endpoint)) + return { unreadCount: notificationMode === "loaded" && !read ? 1 : 0 }; + if (/\/notifications\/read-all\/$/.test(endpoint)) { + read = true; + return { updated: 1, unreadCount: 0 }; + } + if (/\/notifications\/$/.test(endpoint)) + return { + count: notificationMode === "loaded" ? 1 : 0, + unreadCount: notificationMode === "loaded" && !read ? 1 : 0, + next: null, + previous: null, + results: notificationMode === "loaded" ? [notification] : [], + }; + if (/\/programs\/1\/analytics-widget\/$/.test(endpoint) && role === "participant") + return { + programId: 1, + isCompetitive: true, + role, + participant: { + participantProject: null, + caseProvided: true, + caseName: null, + stage: "not_submitted", + submissionOpen: false, + }, + }; + return original(endpoint, method, query, state); +}; + +async function settle(page) { + await page.waitForLoadState("networkidle"); + await page.evaluate(async () => { + for (const image of document.images) image.loading = "eager"; + await document.fonts.ready; + await Promise.all([...document.fonts].map(font => font.load().catch(() => {}))); + }); + await page.waitForLoadState("networkidle"); + await page.addStyleTag({ + content: + "*,*::before,*::after{animation:none!important;transition:none!important;caret-color:transparent!important;}", + }); + await page.evaluate(() => window.scrollTo(0, 0)); + await page.evaluate(async () => { + await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))); + await document.fonts.ready; + await new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))); + }); +} +async function go(page, route, selector) { + await page.evaluate(route => { + history.pushState({}, "", route); + dispatchEvent(new PopStateEvent("popstate")); + }, route); + await page.locator(selector).first().waitFor({ state: "visible" }); + await settle(page); +} +async function geometry(page) { + return page.evaluate(() => { + const box = el => { + const r = el.getBoundingClientRect(); + return { x: r.x, y: r.y, right: r.right, bottom: r.bottom, width: r.width, height: r.height }; + }; + return [...document.querySelectorAll("button .button__label")].flatMap(label => { + const icon = label.querySelector("i[appIcon]"); + if (!icon) return []; + const walker = document.createTreeWalker(label, NodeFilter.SHOW_TEXT); + let text; + while (walker.nextNode()) + if (walker.currentNode.textContent.trim()) { + text = walker.currentNode; + break; + } + if (!text) return []; + const range = document.createRange(); + range.selectNodeContents(text); + return [ + { + text: text.textContent.trim(), + icon: box(icon), + label: box(label), + textBox: box(range), + drawn: icon.querySelector("use").getBBox().width, + }, + ]; + }); + }); +} + +(async () => { + fs.mkdirSync(path.join(output, phase), { recursive: true }); + const rows = []; + const repeated = new Map(); + for (const width of widthsText.split(",").map(Number)) { + const mobile = width < 1000; + for (const variant of process.env.QA_LAYOUT_VARIANTS?.split(",") || [ + "organizer", + "participant", + "controls", + "notifications-empty", + "notifications-loaded", + ]) { + role = variant === "participant" ? "participant" : "organizer"; + fixtures.program.isUserManager = role === "organizer"; + fixtures.program.isUserMember = role === "participant"; + fixtures.program.isUserExpert = false; + // Role/action scenarios have a short description; the core visual gate + // separately covers long descriptions and the legacy read-more state. + fixtures.program.description = + "Программа для студенческих команд и совместной работы над проектами."; + fixtures.program.datetimeRegistrationEnds = "2025-01-01"; + fixtures.program.datetimeProjectSubmissionEnds = "2025-01-01"; + fixtures.program.presentationAddress = "/assets/images/profile/main.svg"; + fixtures.program.links = ["https://example.test/contacts"]; + fixtures.program.materials = ["https://example.test/materials"]; + fixtures.project.shortDescription = + "Платформа для инновационной молодежи, студенческих команд и совместной работы над технологическими проектами"; + notificationMode = variant === "notifications-loaded" ? "loaded" : "empty"; + read = false; + const harness = await launch(width, { baseUrl }); + const { page, context, browser } = harness; + try { + await preview(context, baseUrl); + await page.goto(baseUrl + "/office/feed"); + await page.locator("app-open-vacancy").waitFor(); + await settle(page); + if (variant.startsWith("notifications")) { + await page.locator("button.control-panel__bell").click(); + const dialog = page.locator("#notification-center-popup"); + await dialog.waitFor({ state: "attached" }); + await settle(page); + if (phase !== "baseline") { + const r = await dialog.boundingBox(); + assert.ok( + r.y >= 0 && r.y < 100 && r.x >= 0 && r.x + r.width <= width, + "Bell popup must be within viewport below header", + ); + if (notificationMode === "loaded") { + await page.getByRole("button", { name: "Прочитать все" }).waitFor(); + assert.equal(await dialog.locator(".notification-item").count(), 1); + } else await page.getByText("Пока нет уведомлений", { exact: true }).waitFor(); + } + } else if (variant === "controls") { + await go(page, "/office/projects/dashboard", "app-info-card"); + if (phase !== "baseline" && mobile) { + const description = await page + .locator(".card__description p") + .first() + .evaluate(el => ({ + height: el.getBoundingClientRect().height, + parent: el.parentElement.getBoundingClientRect().height, + line: parseFloat(getComputedStyle(el).lineHeight), + })); + assert.ok( + description.height >= description.line * 2 && + description.parent >= description.height - 1, + "Project description clipped by parent", + ); + } + const createIcons = await geometry(page); + if (phase !== "baseline" && mobile) { + const create = createIcons.find(item => item.text.includes("создать проект")); + assert.ok(create && create.drawn > 0, "Create project icon must be visible"); + assert.ok( + create.icon.y < create.textBox.bottom && create.icon.bottom > create.textBox.y, + "Create project plus wraps under text", + ); + } + await page.screenshot({ + path: path.join(output, phase, `create-project-${width}.png`), + fullPage: true, + }); + rows.push({ width, variant: "create-project", icons: createIcons }); + for (const step of ["contacts", "achievements"]) { + await go( + page, + `/office/projects/1/edit?editingStep=${step}&programLinkId=1`, + step === "contacts" + ? "app-project-partner-resources-step" + : "app-project-achievement-step", + ); + const icons = await geometry(page); + if (phase !== "baseline" && mobile) + for (const item of icons) { + assert.ok(item.drawn > 0, `Missing icon: ${item.text}`); + assert.ok( + item.icon.y < item.textBox.bottom && item.icon.bottom > item.textBox.y, + `Icon wraps under text: ${item.text}`, + ); + assert.ok( + item.icon.x >= item.label.x - 1 && item.icon.right <= item.label.right + 1, + `Icon outside button: ${item.text}`, + ); + } + await page.screenshot({ + path: path.join(output, phase, `${step}-${width}.png`), + fullPage: true, + }); + } + } else { + await go(page, "/office/program/1", "app-program-role-widget"); + const icons = await geometry(page); + if (phase !== "baseline" && mobile) + for (const item of icons) { + assert.ok(item.drawn > 0, `Missing program icon: ${item.text}`); + assert.ok( + item.icon.y < item.textBox.bottom && item.icon.bottom > item.textBox.y, + `Program icon wraps: ${item.text}`, + ); + } + if (phase !== "baseline") + assert.equal( + await page.locator(".widget__badge").textContent(), + role === "participant" ? "участник" : "организатор", + ); + } + if (phase !== "baseline" && mobile) await assertViewport(page); + assert.deepEqual(harness.errors, [], variant + " console errors"); + const pixels = await page.screenshot({ + path: path.join(output, phase, `${variant}-${width}.png`), + fullPage: true, + }); + const key = `${variant}-${width}`; + if (repeated.has(key)) + assert.deepEqual(pixels, repeated.get(key), `${key}: unstable repeated screenshot`); + repeated.set(key, pixels); + if (variant.startsWith("notifications") && phase !== "baseline") { + if (notificationMode === "loaded") { + await page.getByRole("button", { name: "Прочитать все" }).click(); + await page.waitForFunction(() => !document.querySelector(".control-panel__attention")); + } + await page.keyboard.press("Escape"); + await page.locator("#notification-center-popup").waitFor({ state: "detached" }); + await page.locator("button.control-panel__bell").click(); + await page.locator("#notification-center-popup").waitFor({ state: "attached" }); + await page.mouse.click(2, 840); + await page.locator("#notification-center-popup").waitFor({ state: "detached" }); + } + rows.push({ width, variant, passed: true }); + console.log(`${phase}: ${variant} ${width}`); + } finally { + await browser.close(); + } + } + } + fs.writeFileSync( + path.join(output, `${phase}-layout${process.env.QA_LAYOUT_VARIANTS ? "-stability" : ""}.json`), + JSON.stringify(rows, null, 2) + "\n", + ); +})().catch(error => { + console.error(error); + process.exitCode = 1; +}); diff --git a/docs/mobile-production/preview.cjs b/docs/mobile-production/preview.cjs index edcd7079d..f080e2130 100644 --- a/docs/mobile-production/preview.cjs +++ b/docs/mobile-production/preview.cjs @@ -8,6 +8,9 @@ module.exports = async function preview(context, baseUrl) { if (!process.env.QA_BUILD_ROOT) return; let root = path.resolve(process.env.QA_BUILD_ROOT); if (fs.existsSync(path.join(root, "browser/index.html"))) root = path.join(root, "browser"); + const sprite = path.join(root, "assets/icons/symbol/svg/sprite.css.svg"); + if (!fs.readFileSync(sprite, "utf8").includes(" { + const failures = []; + const check = (condition, message) => { + if (!condition) failures.push(message); + }; + const rect = el => el.getBoundingClientRect(); + if (name === "programs") { + for (const card of document.querySelectorAll("app-program-card .card")) { + const info = card.querySelector(".card__info"); + const avatar = rect(card.querySelector(".card__photo")); + const title = rect(card.querySelector(".card__name")); + check(getComputedStyle(info).borderTopWidth === "0px", "Program card has a second border"); + check(title.left >= avatar.right + 8, "Program avatar overlaps title"); + } + } + if (["program", "profile", "project"].includes(name)) { + const cover = rect(document.querySelector(".info__cover")); + const avatar = rect(document.querySelector(".info__avatar")); + check( + Math.abs(avatar.left + avatar.right - cover.left - cover.right) < 2, + "Detail avatar is not centered", + ); + } + if (["profile", "project"].includes(name)) { + const prefix = name === "profile" ? "profile" : "project"; + const overview = document.querySelector(`.${prefix}__about`); + const context = document.querySelector(`.${prefix}__context`); + const news = document.querySelector(`.${prefix}__context ~ .news__form`); + check( + overview && context && rect(overview).bottom <= rect(context).top, + "Main description must precede secondary blocks", + ); + if (news) check(rect(context).bottom <= rect(news).top, "News must follow context"); + } + if (name === "feed") { + for (const option of document.querySelectorAll(".filter__option")) { + const icon = option.querySelector(".filter__option--icon"); + const r = rect(icon); + const parent = rect(option); + check(getComputedStyle(icon).transform === "none", "Feed icon retains desktop transform"); + check( + r.left >= parent.left + 8 && r.right <= parent.right - 8, + "Feed icon escapes card padding", + ); + check(icon.querySelector("use").getBBox().width > 0, "Feed icon is missing"); + } + } + if (name === "vacancies") { + const filter = document.querySelector("app-vacancy-filter"); + const card = document.querySelector("app-project-vacancy-card"); + check(rect(filter).bottom <= rect(card).top, "Vacancy filters must precede results"); + check( + Boolean(filter.compareDocumentPosition(card) & Node.DOCUMENT_POSITION_FOLLOWING), + "Filter DOM order must precede results", + ); + for (const badge of document.querySelectorAll("app-vacancy-status app-badge")) + check( + getComputedStyle(badge).borderTopWidth === "0px", + "Vacancy badge has an outer border", + ); + } + if (name === "profile-edit") { + const header = + document.querySelector("app-profile-edit .profile__top") || + document.querySelector(".profile__top"); + const action = header.querySelector("button.button"); + const heading = header.querySelector(".page-header__actions"); + check( + Math.abs(rect(action).width - rect(heading).width) < 2, + "Profile save does not fill action row", + ); + const row = document.querySelector(".profile__wrapper--main > .profile__row"); + const avatar = row.querySelector("app-avatar-control"); + check( + Math.abs(rect(avatar).left + rect(avatar).right - rect(row).left - rect(row).right) < 2, + "Profile editor avatar is not centered", + ); + } + return failures; + }, name); + assert.deepEqual(failures, [], `${name}: mobile composition`); +} + function verify(name, layout) { const gap = actions => { for (let i = 1; i < actions.length; i++) @@ -301,6 +385,8 @@ function verify(name, layout) { }); if (name === "program" && width > 1000) await page.locator("app-program-role-widget").waitFor({ state: "attached" }); + if (["program", "profile", "project"].includes(name)) + await page.locator(".info__avatar").waitFor({ state: "visible" }); await settle(page); if (name === "team-invite") { await page.locator(".invite__submit button").click(); @@ -313,8 +399,17 @@ function verify(name, layout) { if (checkMobile && width < 1000) { try { verify(name, layout); + await verifyMobileComposition(page, name); } catch (error) { console.error(JSON.stringify({ name, width, layout })); + await page.screenshot({ + path: path.join(output, phase, `failure-${name}-${width}.png`), + fullPage: true, + }); + fs.writeFileSync( + path.join(output, phase, `failure-${name}-${width}.html`), + await page.content(), + ); throw error; } } diff --git a/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.html b/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.html index cf5fad45e..3b796b005 100644 --- a/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.html +++ b/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.html @@ -27,6 +27,7 @@

обо мне

} } + @if (isProfileEmpty()) { @if (loggedUserId() === user()!.id) {
diff --git a/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.scss b/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.scss index f226c1cbd..cd50f9468 100644 --- a/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.scss +++ b/projects/social_platform/src/app/ui/pages/profile/detail/main/components/profile-mid-side/profile-mid-side.component.scss @@ -1,3 +1,5 @@ +/** @format */ + @use "styles/responsive"; .profile { @@ -54,6 +56,13 @@ } } +@media screen and (max-width: 999px) { + .profile__directions { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + } +} + .about { padding: 24px; background-color: var(--light-white); diff --git a/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.html b/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.html index 1551face9..a663639eb 100644 --- a/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.html +++ b/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.html @@ -3,11 +3,18 @@ @if (user()) {
- - - - - + @if (desktopLayout()) { + + + + } @else { + +
+ + +
+
+ }
} diff --git a/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.scss b/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.scss index 89dc236c9..28c1cb606 100644 --- a/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.scss +++ b/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.scss @@ -25,3 +25,16 @@ } } } + +@media screen and (max-width: 999px) { + .profile__context { + display: grid; + gap: 24px; + min-width: 0; + margin: 24px 0; + + > * { + min-width: 0; + } + } +} diff --git a/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.ts b/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.ts index 88f48ec19..43f23c998 100644 --- a/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.ts +++ b/projects/social_platform/src/app/ui/pages/profile/detail/main/main.component.ts @@ -2,6 +2,7 @@ import { ChangeDetectionStrategy, Component, inject, OnDestroy, OnInit } from "@angular/core"; import { CommonModule } from "@angular/common"; +import { DesktopLayoutService } from "@uilib"; import { ProfileDetailInfoService } from "@api/profile/facades/detail/profile-detail-info.service"; import { ProfileDetailUIInfoService } from "@api/profile/facades/detail/ui/profile-detail-ui-info.service"; import { ExpandService } from "@api/expand/expand.service"; @@ -24,6 +25,7 @@ import { ProfileMidSideComponent } from "./components/profile-mid-side/profile-m changeDetection: ChangeDetectionStrategy.OnPush, }) export class ProfileMainComponent implements OnInit, OnDestroy { + protected readonly desktopLayout = inject(DesktopLayoutService).desktop; private readonly profileDetailInfoService = inject(ProfileDetailInfoService); private readonly profileDetailUIInfoService = inject(ProfileDetailUIInfoService); diff --git a/projects/social_platform/src/app/ui/pages/profile/edit/components/profile-main-step/profile-main-step.component.scss b/projects/social_platform/src/app/ui/pages/profile/edit/components/profile-main-step/profile-main-step.component.scss index 7afeb2c28..a60ecaa9e 100644 --- a/projects/social_platform/src/app/ui/pages/profile/edit/components/profile-main-step/profile-main-step.component.scss +++ b/projects/social_platform/src/app/ui/pages/profile/edit/components/profile-main-step/profile-main-step.component.scss @@ -115,4 +115,8 @@ // Адаптив из dev применяется только ниже desktop breakpoint. @media screen and (max-width: 999px) { @include profile-form.responsive-layout; + + .profile__wrapper--main > .profile__row { + justify-content: center; + } } diff --git a/projects/social_platform/src/app/ui/pages/profile/edit/edit.component.scss b/projects/social_platform/src/app/ui/pages/profile/edit/edit.component.scss index 4f80cac45..1f3f07d46 100644 --- a/projects/social_platform/src/app/ui/pages/profile/edit/edit.component.scss +++ b/projects/social_platform/src/app/ui/pages/profile/edit/edit.component.scss @@ -437,7 +437,19 @@ position: static; gap: 12px; justify-content: space-between; - padding: 8px var(--page-gutter); + padding: 16px var(--page-gutter); + background: transparent; + border-radius: 0; + + ::ng-deep .page-header { + flex-direction: column; + align-items: stretch; + margin-bottom: 0; + } + + ::ng-deep .page-header__actions { + width: 100%; + } } .profile__left form { @@ -446,6 +458,13 @@ .profile__save { @include responsive.mobile-actions; + + width: 100%; + + app-button, + ::ng-deep button { + width: 100%; + } } .profile__wrapper--settings { diff --git a/projects/social_platform/src/app/ui/pages/program/detail/main/role-widget/program-role-widget.component.scss b/projects/social_platform/src/app/ui/pages/program/detail/main/role-widget/program-role-widget.component.scss index f7c6d2b53..5512232bc 100644 --- a/projects/social_platform/src/app/ui/pages/program/detail/main/role-widget/program-role-widget.component.scss +++ b/projects/social_platform/src/app/ui/pages/program/detail/main/role-widget/program-role-widget.component.scss @@ -356,5 +356,36 @@ .widget__badge { font-size: var(--ui-font-small); } + + .widget__project-lines { + gap: 8px; + line-height: 1.5; + } + + .widget__stage-state { + height: auto; + font-size: var(--ui-font-small); + line-height: 1.5; + } + + .widget__steps { + margin-top: 12px; + } + + .widget__steps li { + font-size: var(--ui-font-small); + line-height: 1.5; + } + + .widget__steps li:not(:last-child)::after { + top: 8px; + } + + .widget__dot { + width: 16px; + height: 16px; + margin-bottom: 8px; + line-height: 16px; + } } } diff --git a/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.scss b/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.scss index 03c46451d..38fe69aff 100644 --- a/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.scss +++ b/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.scss @@ -82,15 +82,24 @@ grid-template-columns: 64px minmax(0, 1fr); gap: 12px; align-items: start; + width: 100%; + max-width: none; &__photo { width: 64px; height: 64px; + padding: 0; + border: 0; } &__info { display: grid; gap: 8px; + padding: 0; + margin-left: 0; + overflow: visible; + border: 0; + border-radius: 0; } &__name { @@ -102,11 +111,13 @@ overflow-wrap: anywhere; -webkit-box-orient: vertical; -webkit-line-clamp: 3; + white-space: normal; } &__dates { display: grid; gap: 4px; + white-space: normal; } &__description { @@ -119,6 +130,7 @@ max-width: 100%; padding: 4px 8px; overflow-wrap: anywhere; + white-space: normal; } } } diff --git a/projects/social_platform/src/app/ui/pages/projects/detail/info/components/projects-mid-side/projects-mid-side.component.html b/projects/social_platform/src/app/ui/pages/projects/detail/info/components/projects-mid-side/projects-mid-side.component.html index 3bcdd998b..938377277 100644 --- a/projects/social_platform/src/app/ui/pages/projects/detail/info/components/projects-mid-side/projects-mid-side.component.html +++ b/projects/social_platform/src/app/ui/pages/projects/detail/info/components/projects-mid-side/projects-mid-side.component.html @@ -84,14 +84,6 @@

о проекте

@if (profile()) {
- @if (project()!.leader === profile()!.id) { - - } -
@for (directionItem of directions(); track $index) { о проекте }
+ + + @if (project()!.leader === profile()!.id) { + + } + @for (n of news(); track n.id) {
- - - - - + @if (desktopLayout()) { + + + + } @else { + +
+ + +
+
+ }
diff --git a/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.scss b/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.scss index 6871c9cc8..873eba77e 100644 --- a/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.scss +++ b/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.scss @@ -29,3 +29,16 @@ } } } + +@media screen and (max-width: 999px) { + .project__context { + display: grid; + gap: 24px; + min-width: 0; + margin: 24px 0; + + > * { + min-width: 0; + } + } +} diff --git a/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.ts b/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.ts index b80c1b6ae..d2fc50157 100644 --- a/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.ts +++ b/projects/social_platform/src/app/ui/pages/projects/detail/info/info.component.ts @@ -1,6 +1,7 @@ /** @format */ import { CommonModule } from "@angular/common"; +import { DesktopLayoutService } from "@uilib"; import { AfterViewInit, ChangeDetectionStrategy, @@ -35,6 +36,7 @@ import { ProjectsMidSideComponent } from "./components/projects-mid-side/project changeDetection: ChangeDetectionStrategy.OnPush, }) export class ProjectInfoComponent implements OnInit, AfterViewInit, OnDestroy { + protected readonly desktopLayout = inject(DesktopLayoutService).desktop; private readonly projectsDetailService = inject(ProjectsDetailService); private readonly projectsDetailUIInfoService = inject(ProjectsDetailUIInfoService); diff --git a/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.html b/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.html index d41e33820..3395cc725 100644 --- a/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.html +++ b/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.html @@ -264,14 +264,6 @@

Отправить заявку?

редактировать проект

- - удалить проект - редактировать проект > {{ isCompetitive() && !submitted() ? "отправить заявку" : "сохранить" }} + + удалить проект +
diff --git a/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.scss b/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.scss index e0e1f955c..24ae0f0f3 100644 --- a/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.scss +++ b/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.scss @@ -218,7 +218,7 @@ .project__top { position: static; display: grid; - grid-template-columns: 44px minmax(0, 1fr); + grid-template-columns: minmax(0, 1fr); gap: 12px; justify-content: space-between; padding: 8px var(--page-gutter); @@ -246,10 +246,16 @@ .project__back { align-self: start; - justify-content: center; + justify-content: flex-start; min-height: 44px; } + .project__title { + display: block; + font-size: var(--ui-font-h3); + line-height: 1.3; + } + .project__wrapper--settings { min-width: 0; } diff --git a/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.spec.ts b/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.spec.ts index 63895a13e..292ee9d2f 100644 --- a/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.spec.ts +++ b/projects/social_platform/src/app/ui/pages/projects/edit/edit.component.spec.ts @@ -154,9 +154,11 @@ describe("ProjectEditComponent", () => { it("на любом шаге блокирует сохранение старой обложки во время reset", () => { fixture.debugElement.injector.get(ProjectCoverResetService).pending.set(true); fixture.detectChanges(); - const buttons = fixture.nativeElement.querySelectorAll(".project__save app-button button"); - expect(buttons[1].disabled).toBe(true); - expect(buttons[2].disabled).toBe(true); + const buttons = fixture.nativeElement.querySelectorAll( + ".project__save button:not(.button--red)", + ); + expect(buttons).toHaveLength(2); + expect([...buttons].every((button: HTMLButtonElement) => button.disabled)).toBe(true); }); it("uses canonical competition/submitted state for the primary action label", () => { @@ -165,12 +167,15 @@ describe("ProjectEditComponent", () => { (facade.isCompetitive as ReturnType>).set(true); fixture.detectChanges(); expect( - fixture.nativeElement.querySelectorAll(".project__save app-button")[2].textContent, + fixture.nativeElement.querySelector(".project__save .button--inline:not(.button--red)") + .textContent, ).toContain("отправить заявку"); (facade.submitted as ReturnType>).set(true); fixture.detectChanges(); expect( - fixture.nativeElement.querySelectorAll(".project__save app-button")[2].textContent.trim(), + fixture.nativeElement + .querySelector(".project__save .button--inline:not(.button--red)") + .textContent.trim(), ).toBe("сохранить"); }); }); diff --git a/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.html b/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.html index c54fe15e5..e13c245aa 100644 --- a/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.html +++ b/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.html @@ -57,18 +57,18 @@ } + @if (isAll() === "all") { +
+ +
+ } + - - @if (isAll() === "all") { -
- -
- } diff --git a/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.scss b/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.scss index d7690f8fd..de702d217 100644 --- a/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.scss +++ b/projects/social_platform/src/app/ui/pages/vacancies/vacancies.component.scss @@ -44,3 +44,9 @@ } } } + +@media screen and (max-width: 999px) { + .page__info { + grid-template-columns: minmax(0, 1fr); + } +} diff --git a/projects/social_platform/src/app/ui/widgets/detail/detail.component.scss b/projects/social_platform/src/app/ui/widgets/detail/detail.component.scss index f5d8d84bd..105c3e33f 100644 --- a/projects/social_platform/src/app/ui/widgets/detail/detail.component.scss +++ b/projects/social_platform/src/app/ui/widgets/detail/detail.component.scss @@ -472,13 +472,22 @@ $detail-bar-mb: 12px; .info__avatar, .info__avatar--program { bottom: -32px; - left: 16px; - transform: none; + left: 50%; + transform: translateX(-50%); } .info__page-header { padding-top: 52px; margin-bottom: 16px; + + ::ng-deep .page-header, + ::ng-deep .page-header__title-row { + justify-content: center; + } + + ::ng-deep .page-header__title { + text-align: center; + } } .info__actions { @@ -523,6 +532,12 @@ $detail-bar-mb: 12px; } } + @media (max-width: 359px) { + .info__actions { + grid-template-columns: minmax(0, 1fr); + } + } + .approve, .cancel, .support { diff --git a/projects/social_platform/src/app/ui/widgets/feed-filter/feed-filter.component.scss b/projects/social_platform/src/app/ui/widgets/feed-filter/feed-filter.component.scss index 2b06e9ba4..af4a7ba73 100644 --- a/projects/social_platform/src/app/ui/widgets/feed-filter/feed-filter.component.scss +++ b/projects/social_platform/src/app/ui/widgets/feed-filter/feed-filter.component.scss @@ -225,6 +225,14 @@ a:hover { width: 20px; height: 20px; color: var(--accent); + background: transparent; + border: 0; + border-radius: 0; + transform: none; + + i { + color: var(--accent) !important; + } } &__title { @@ -240,4 +248,8 @@ a:hover { text-align: left; } } + + .filter__option--active .filter__option--icon { + background: transparent; + } } diff --git a/projects/social_platform/src/app/ui/widgets/info-card/info-card.component.scss b/projects/social_platform/src/app/ui/widgets/info-card/info-card.component.scss index 7aa91db6e..89c4dba81 100644 --- a/projects/social_platform/src/app/ui/widgets/info-card/info-card.component.scss +++ b/projects/social_platform/src/app/ui/widgets/info-card/info-card.component.scss @@ -716,6 +716,16 @@ .card--my-project .card__description p { font-size: var(--ui-font-small); line-height: 18px; + -webkit-line-clamp: 3; + } + + .card--project .card__description, + .card--my-project .card__description, + .card--my-project .card__description--with-program { + flex: 0 0 auto; + height: auto; + min-height: 0; + margin-bottom: 12px; } .card__subscription-action { diff --git a/projects/social_platform/src/app/ui/widgets/project-direction-card/project-direction-card.component.scss b/projects/social_platform/src/app/ui/widgets/project-direction-card/project-direction-card.component.scss index 5d4eaba48..b106256c6 100644 --- a/projects/social_platform/src/app/ui/widgets/project-direction-card/project-direction-card.component.scss +++ b/projects/social_platform/src/app/ui/widgets/project-direction-card/project-direction-card.component.scss @@ -1,3 +1,5 @@ +/** @format */ + .direction-card { position: relative; display: flex; @@ -247,3 +249,36 @@ } } } + +@media screen and (max-width: 999px) { + :host { + display: block; + min-width: 0; + } + + .direction-card { + flex-direction: row; + gap: 8px; + justify-content: flex-start; + width: 100%; + height: auto; + min-height: 44px; + padding: 12px; + text-align: left; + + &__icon { + position: static; + flex-shrink: 0; + padding: 0; + background: transparent; + border: 0; + transform: none; + } + + &__text { + width: auto; + font-size: var(--ui-font-small); + line-height: 1.5; + } + } +} diff --git a/projects/social_platform/src/app/ui/widgets/vacancy-status/vacancy-status.component.scss b/projects/social_platform/src/app/ui/widgets/vacancy-status/vacancy-status.component.scss index 3d4f4c0d5..ae0fce473 100644 --- a/projects/social_platform/src/app/ui/widgets/vacancy-status/vacancy-status.component.scss +++ b/projects/social_platform/src/app/ui/widgets/vacancy-status/vacancy-status.component.scss @@ -40,3 +40,12 @@ } // Адаптив из dev применяется только ниже desktop breakpoint. +@media screen and (max-width: 999px) { + .status { + min-height: 0; + padding: 0; + background: transparent; + border: 0; + border-radius: 0; + } +} diff --git a/projects/ui/src/lib/components/layout/profile-control-panel/profile-control-panel.component.scss b/projects/ui/src/lib/components/layout/profile-control-panel/profile-control-panel.component.scss index 4808b487b..0455b8b0b 100644 --- a/projects/ui/src/lib/components/layout/profile-control-panel/profile-control-panel.component.scss +++ b/projects/ui/src/lib/components/layout/profile-control-panel/profile-control-panel.component.scss @@ -451,8 +451,9 @@ } .control-panel__notifications { - top: 100%; - right: 0%; + top: 64px; + right: var(--page-gutter); + left: var(--page-gutter); z-index: 20; width: auto; max-width: none; diff --git a/projects/ui/src/lib/components/primitives/button/button.component.scss b/projects/ui/src/lib/components/primitives/button/button.component.scss index da7f7a29c..22faf18a8 100644 --- a/projects/ui/src/lib/components/primitives/button/button.component.scss +++ b/projects/ui/src/lib/components/primitives/button/button.component.scss @@ -173,12 +173,15 @@ .button { @include ui-foundation.button; - &__content { + max-height: none; + + &__label { display: inline-flex; gap: var(--ui-space-sm); align-items: center; justify-content: center; min-width: 0; + max-width: 100%; } &__content--loading { @@ -193,4 +196,18 @@ justify-content: center; } } + + .button.button--inline .button__label, + .button.button--outline .button__label { + display: inline-flex; + margin-right: 0; + + ::ng-deep > * { + margin-right: 0; + } + + ::ng-deep i { + flex-shrink: 0; + } + } }