diff --git a/AGENTS.md b/AGENTS.md index 1449cc9..f218b3d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -3,3 +3,5 @@ Исходники и опубликованная сборка находятся в Gitea `german/site-servaki-online`; сайт размещён отдельно на Beget. Перед изменением подтянуть `main`, не включать в Git секреты, резервные копии и локальные зависимости. После **каждой генерации для сайта** сохранять в Яндекс Диск все исходные медиа и варианты, промпты, оптимизированные файлы и готовую сборку. Использовать новую датированную папку внутри `D:\YandexDisk\servaki.online\лендинги\servaki.online site\`. Запустить `save_generations_yadisk.py` сначала без `--copy` для плана, затем с `--copy`; указать `--raw-dir` текущего генератора, `--target` папки выпуска и при необходимости `--source` рабочей копии. Проверить итоговый `MANIFEST.json` и число файлов. Не считать запись в локальную папку подтверждением завершённой облачной синхронизации без проверки клиента Яндекс Диска. + +Если на изображении есть читаемые надписи на одежде, вывесках или приборах, использовать осмысленный русский текст кириллицей. Для фото с работой специалиста допустима небольшая метка «СЕРВАКИ»; для иллюстративных объектов — короткая надпись по теме. Проверять каждое слово на полном размере и в опубликованном WebP, исключать случайные латинские буквы и псевдотекст. Не добавлять реальные имена или данные клиентов. Исходный снимок, результат редактирования и точный промпт хранить раздельно. diff --git a/README.md b/README.md index e89af60..1549e33 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Выпуск с анимацией изображений сохранён в `servaki.online/лендинги/servaki.online site/2026-09-28-motion-release/`; 256 файлов проверены по [манифесту](archive-manifests/2026-09-28-motion-release.json). Эффекты работают только на видимых карточках и выключаются при настройке «уменьшить движение». Все 23 проверенных адреса опубликованного сайта совпали со сборкой. +Четыре фото с надписями на одежде и вывесках локализованы на русский язык. Версии WebP имеют суффикс `-ru`, чтобы обновление не зависело от кэша браузера; исходные снимки сохранены отдельно. [Архив нового выпуска](archive-manifests/2026-09-28-russian-image-text.json) содержит 289 файлов. На сайте 27 проверенных адресов совпали со сборкой. + ## Сведения о прежней версии **Сайт:** https://servaki.online diff --git a/SITE-BUILD.md b/SITE-BUILD.md index 2fedd11..0fba22a 100644 --- a/SITE-BUILD.md +++ b/SITE-BUILD.md @@ -11,6 +11,7 @@ - Уникальные title/description/canonical, Open Graph, Article/Service/FAQPage/BreadcrumbList, sitemap, robots. - 12 тематических AI-иллюстраций для карточек главной и 12 тёплых фотореалистичных AI-изображений для внутренних страниц, с WebP-версиями 480/960/1536 px. У каждой статьи своё изображение и подпись о том, что оно создано ИИ без данных и фотографий клиентов. - На страницах услуг — конкретные пояснения о согласовании доступа, ограничении видимости данных и бережной работе в действующем офисе или на объекте. Это описание подхода, а не обещание абсолютной безопасности. +- На четырёх тёплых иллюстративных фото уточнены надписи: «ГОСТЕВОЙ ДОМ» и «КАФЕ» на вывесках, «СЕРВАКИ» на одежде специалистов. Написание проверено на полном размере и в WebP. Исходные и отредактированные PNG хранятся отдельно; для новых файлов используется суффикс `-ru`, чтобы браузер не показывал старую закешированную версию. - В тексте каждой из 12 статей — тематическая схема работы оборудования: индикаторы приборов и движение сигнала между ними. Схемы состоят из компактных SVG и CSS, не загружают GIF или видео. При настройке «уменьшить движение» индикаторы и путь остаются статичными. - На 12 иллюстрациях карточек главной, в каталогах и блоках связанных решений поверх WebP добавлены короткие маршруты сигнала и индикаторы работы оборудования. Они не содержат данных клиентов. Анимация включается только при появлении карточки на экране и выключается при настройке «уменьшить движение»; изображение остаётся доступным без JavaScript. Общий вес новых CSS и JS — 2 404 байта. Самая тяжёлая иллюстрация: 37,1 КБ при 480 px, 116,7 КБ при 960 px и 236,2 КБ при 1536 px. - Описания под всеми 12 карточками главной переписаны: задача клиента, способ работы и результат; условия отклика указаны без обещания устранить любой сбой за 15 минут. У трёх каталогов и главной — отдельные поисковые описания. @@ -30,7 +31,7 @@ python -m http.server 5186 --bind 127.0.0.1 --directory public python verify.py ``` -`content/pages.json` — тексты; `content/card-copy.json` — тексты карточек; `content/flow-scenes.json` — подписи и оборудование для анимированных схем; `content/image-motion.json` — иллюстративные маршруты сигнала на карточках; `content/image-prompts.json` и `content/photo-prompts.json` — промпты встроенного image_gen; `content/photo-alt.json` и `content/privacy-notes.json` — описания фото и редакционные пояснения; `artwork/` — оригиналы; `assets/` — CSS, JS и WebP; `public/` — готовый сайт; `reference/original.html` — сохранённая исходная главная. +`content/pages.json` — тексты; `content/card-copy.json` — тексты карточек; `content/flow-scenes.json` — подписи и оборудование для анимированных схем; `content/image-motion.json` — иллюстративные маршруты сигнала на карточках; `content/image-prompts.json` и `content/photo-prompts.json` — промпты исходной генерации; `content/photo-edit-prompts.json` — точные русские надписи и промпты локализации; `content/photo-alt.json` и `content/privacy-notes.json` — описания фото и редакционные пояснения; `artwork/` — оригиналы и отредактированные фото; `assets/` — CSS, JS и WebP; `public/` — готовый сайт; `reference/original.html` — сохранённая исходная главная. ## Фактическая основа @@ -58,6 +59,8 @@ python verify.py Выпуск анимации 28.09.2026: локальная проверка подтвердила 12 анимированных иллюстраций, 16 доступных HTML-страниц, лимиты размеров WebP и неизменные цены. В Chrome проверены каталоги при ширине 1280 и 500 px, а также режим «уменьшить движение». Скрипт `deploy_beget.py update-motion` перед заменой сравнивает все файлы предыдущего выпуска с боевым сайтом и сохраняет изменяемые HTML вне публичного каталога. +Выпуск русских надписей 28.09.2026: четыре фото получили версионированные файлы `photo-*-ru-{480,960,1536}.webp`; заменены только четыре профильные статьи, исходные WebP сохранены для отката. Перед загрузкой 100 файлов прежнего выпуска сверены с Beget, после неё 27 публичных адресов побайтно совпали со сборкой, TLS действителен. Предыдущие HTML сохранены вне webroot в `/home/i/infogypa/servaki.online/backup-2026-09-28-before-russian-photos/`. Все 289 исходных и готовых файлов с проверенными SHA-256 сохранены в Яндекс Диске `servaki.online/лендинги/servaki.online site/2026-09-28-russian-image-text/`; облачная синхронизация отдельно не подтверждена. + Браузер: главная и статья на обычном экране и 390×844; горизонтального переполнения нет, responsive images загружаются, оглавление и FAQ работают. Анимированная схема сети визуально проверена на 1280 px и в мобильном окне 390 px: устройства выстраиваются вертикально, путь сигнала сохраняется. Исходная форма на главной остаётся демонстрационной; все новые CTA ведут прямо в Telegram или на телефон, сообщения автоматически не отправлялись. ## Публикация и откат diff --git a/archive-manifests/2026-09-28-russian-image-text.json b/archive-manifests/2026-09-28-russian-image-text.json new file mode 100644 index 0000000..031d1ea --- /dev/null +++ b/archive-manifests/2026-09-28-russian-image-text.json @@ -0,0 +1,1563 @@ +{ + "site": "servaki.online", + "release_date": "2026-09-28", + "files": [ + { + "path": "SITE-BUILD.md", + "bytes": 15931, + "sha256": "cc03a25f3549fb28b5455056e41110b4a34ffcbbaa646bfeae6686b640abc468" + }, + { + "path": "artwork/agriculture.png", + "bytes": 2647629, + "sha256": "5997fd7e1797f28610dde42ed22dead3e1fabcf6109d54b21b9473af3c46be3b" + }, + { + "path": "artwork/automation.png", + "bytes": 2026931, + "sha256": "8182d1dfb2c1603f86805a9903fcef9ab51a2c3f144f2dbd45d5c692dc41f320" + }, + { + "path": "artwork/construction.png", + "bytes": 2591922, + "sha256": "49417046c9a59fd001066881d09ec0980553fb29a668af2bd79df1943e770b83" + }, + { + "path": "artwork/contact-sheet.jpg", + "bytes": 342270, + "sha256": "8740c1879edf96462d40aff21f6cf73e028dfa79097786c355973dda91e163cb" + }, + { + "path": "artwork/horeca.png", + "bytes": 2581983, + "sha256": "fb8d834212db29c244e2ff85381782a17a04bbfec57063e999631e8698c0df36" + }, + { + "path": "artwork/it-subscription.png", + "bytes": 1932910, + "sha256": "34c7a27b62343092e5b666498bd32df7edb4395e6435c339bfd257ba32acfa88" + }, + { + "path": "artwork/monitoring-security.png", + "bytes": 1928162, + "sha256": "545b7dae63c019c87bba6f9a8c025435a692cf3cf207efbdaf2a0c8425f7792d" + }, + { + "path": "artwork/networks-vpn.png", + "bytes": 2131432, + "sha256": "477d07c3cb051a14bf5dcc45192a3c007708f438cdac684a8e4996d38b159547" + }, + { + "path": "artwork/photos-localized/agriculture.png", + "bytes": 2043752, + "sha256": "be6129fafbd711242b8063142fc26b719745047306947f4de30ac462ce42c7f4" + }, + { + "path": "artwork/photos-localized/construction.png", + "bytes": 1910833, + "sha256": "7b96bc1574ed0d7c3af4c08e8bea18e42d17465edbc77b58266687fba8334da6" + }, + { + "path": "artwork/photos-localized/horeca.png", + "bytes": 1983761, + "sha256": "de6ef4986ef70d21372352f3f5308e140ccb311562198ea83c10025b9bb8ef24" + }, + { + "path": "artwork/photos-localized/video-surveillance.png", + "bytes": 2388355, + "sha256": "3de1de85a6d4c92ef83744f7be94b8b74b421783fadd0862979614960d99017f" + }, + { + "path": "artwork/photos-selected/agriculture.png", + "bytes": 2227864, + "sha256": "3cab490cf3ab337b33bb8271ee72d7b3617bb6d328006f8d3974cb689b6383b2" + }, + { + "path": "artwork/photos-selected/automation.png", + "bytes": 2060967, + "sha256": "155c17a595ce2a669a7586d38e51ee4cac1bcd9fbe3b90d5a3c7d5b5c31603f3" + }, + { + "path": "artwork/photos-selected/construction.png", + "bytes": 1855721, + "sha256": "586df166b670707aea5b44257beee35c3d599c01437d78d82e94b502ac1684f8" + }, + { + "path": "artwork/photos-selected/contact-sheet.jpg", + "bytes": 366473, + "sha256": "75999ee2d944a03cc4129c5b166cbd3ce24900709a8ecb21a0ff85d01070d470" + }, + { + "path": "artwork/photos-selected/horeca.png", + "bytes": 2019455, + "sha256": "a915b522b5fcda922f0c7c55ec8edc72a9b524da4634155962e89a7f49f93735" + }, + { + "path": "artwork/photos-selected/it-subscription.png", + "bytes": 2234101, + "sha256": "c0d87a01a19d77066b09bf09f0bb5c22f49ba9a76d0288654e2769befa7286bb" + }, + { + "path": "artwork/photos-selected/monitoring-security.png", + "bytes": 2115901, + "sha256": "590d30389cdec559f136c6196730319d553e4388b4ac5945f196ec1be432c1db" + }, + { + "path": "artwork/photos-selected/networks-vpn.png", + "bytes": 2263701, + "sha256": "146a9c2c5a8d363df61879ff4620bad18930420546aa4da0cad75d4eb8a45c21" + }, + { + "path": "artwork/photos-selected/rapid-response.png", + "bytes": 1957116, + "sha256": "60d3ed076ee1cb6ea61e1ce88a15a0b8fc948b027f2e7ba06d5ff6ba8521d949" + }, + { + "path": "artwork/photos-selected/remote-desktop.png", + "bytes": 2146998, + "sha256": "00f2a6fbdd3f79c398a0bdb94be9f150ffa3dda5c4b7005713ea6cbb8a84e7da" + }, + { + "path": "artwork/photos-selected/remote-sites.png", + "bytes": 2311691, + "sha256": "02b8e1b31930d59411b7878b3a97e675593caa57c845a1744252f1b590c97c2b" + }, + { + "path": "artwork/photos-selected/servers-hosting.png", + "bytes": 1858936, + "sha256": "b502740b92f77d2ed188da70f213986d9e679617f8e564fa9097ea597adc221f" + }, + { + "path": "artwork/photos-selected/video-surveillance.png", + "bytes": 2337420, + "sha256": "697d3921233b19f46a789a57752c37109f59163b1870379652788828a6422bcc" + }, + { + "path": "artwork/photos/agriculture.png", + "bytes": 2227864, + "sha256": "3cab490cf3ab337b33bb8271ee72d7b3617bb6d328006f8d3974cb689b6383b2" + }, + { + "path": "artwork/photos/automation.png", + "bytes": 2122884, + "sha256": "8250ded29bba18cca23576da0d17aef9b6c7affb2be3dad17afe169b10e50f9d" + }, + { + "path": "artwork/photos/construction.png", + "bytes": 1855721, + "sha256": "586df166b670707aea5b44257beee35c3d599c01437d78d82e94b502ac1684f8" + }, + { + "path": "artwork/photos/contact-sheet.jpg", + "bytes": 364477, + "sha256": "1b26d16edbcead7145b34baa100de74284730259dadd4ed625790381ce94c509" + }, + { + "path": "artwork/photos/horeca.png", + "bytes": 2109612, + "sha256": "a13ea734f2435be1984b0b97f986e78d84a27a403813b512865f527547972d18" + }, + { + "path": "artwork/photos/it-subscription.png", + "bytes": 2234101, + "sha256": "c0d87a01a19d77066b09bf09f0bb5c22f49ba9a76d0288654e2769befa7286bb" + }, + { + "path": "artwork/photos/monitoring-security.png", + "bytes": 2193261, + "sha256": "e0573a72ad92affcc252b88492968b7e26e20fd719ca18c3e92aafbd0f0bab2f" + }, + { + "path": "artwork/photos/networks-vpn.png", + "bytes": 2444353, + "sha256": "737afa550de774d0cca9f95537151a1cc0391fa963fe851296a536f2f4567cd7" + }, + { + "path": "artwork/photos/rapid-response.png", + "bytes": 1957116, + "sha256": "60d3ed076ee1cb6ea61e1ce88a15a0b8fc948b027f2e7ba06d5ff6ba8521d949" + }, + { + "path": "artwork/photos/remote-desktop.png", + "bytes": 2254204, + "sha256": "52a4f1f6d686ea7533b64eeb27d147396fac446e1151f0cabe977eba84f17da9" + }, + { + "path": "artwork/photos/remote-sites.png", + "bytes": 2311691, + "sha256": "02b8e1b31930d59411b7878b3a97e675593caa57c845a1744252f1b590c97c2b" + }, + { + "path": "artwork/photos/servers-hosting.png", + "bytes": 1928760, + "sha256": "c4a5f046ea78590d30e3aebe52df6799a2d597715fd1eda21e9f87d81b16cc6d" + }, + { + "path": "artwork/photos/video-surveillance.png", + "bytes": 2459341, + "sha256": "735364d09ba3eee09375fa02c5967c36b24c5d9a1faa2f7ad60c9b1e9dd64c98" + }, + { + "path": "artwork/rapid-response.png", + "bytes": 1856373, + "sha256": "09940f4b92266d58ca16be5c29bd1cfda86c8e448dfd4cf42d7c9dec936cc5e3" + }, + { + "path": "artwork/remote-desktop.png", + "bytes": 1893214, + "sha256": "70f575bedecc2dca777bbbcda53db5564d5057c711b8754f8e205d07962b1cc9" + }, + { + "path": "artwork/remote-sites.png", + "bytes": 2506550, + "sha256": "34a4b6d54951c817b37699e2fe199fd0e196141818675173bb31d4892ea95c6c" + }, + { + "path": "artwork/servers-hosting.png", + "bytes": 2000971, + "sha256": "2316f92788906fff0e46e51f337f3db046cb39b958b30721bc14f1f78e31c7af" + }, + { + "path": "artwork/video-surveillance.png", + "bytes": 2147875, + "sha256": "fbb7cb9719a7b2e7df1c5676b17a2fcd8455ae48f120af362118ef5b978ab246" + }, + { + "path": "assets/agriculture-1536.webp", + "bytes": 213438, + "sha256": "0620c8848fa19b06eba11f03b427b073125f576be61b7a37a24e99f1983d2529" + }, + { + "path": "assets/agriculture-480.webp", + "bytes": 30138, + "sha256": "ca6783ae677b83d2046432ffc11709eab5a6257742784a336c6c449668107b05" + }, + { + "path": "assets/agriculture-960.webp", + "bytes": 101508, + "sha256": "7f3b65935494197fb34f704d7d8622e515f5060880ff400fe89cb44b870b402a" + }, + { + "path": "assets/automation-1536.webp", + "bytes": 103890, + "sha256": "2ac74affac2f77df7570791611608ca3871a6f411cbd12821c72406626772572" + }, + { + "path": "assets/automation-480.webp", + "bytes": 20552, + "sha256": "5d94300a756413f0e6e17df2457dfafcf96ceab725a16716295b2838fcc3758f" + }, + { + "path": "assets/automation-960.webp", + "bytes": 55244, + "sha256": "1456ba92c329ae3ac458561eac19652fe2814eaccef652bb13368862be209095" + }, + { + "path": "assets/construction-1536.webp", + "bytes": 218014, + "sha256": "5717c1fc9ea1cfaaf29f2e6482ff69bfe702f684980f30faa7cb0fa672ae94c9" + }, + { + "path": "assets/construction-480.webp", + "bytes": 28678, + "sha256": "1949a7d869cda57fcd4299ddb70c826748af461efe9f618f8026cd7779b6eb01" + }, + { + "path": "assets/construction-960.webp", + "bytes": 101112, + "sha256": "ef22f37ab3d466f382a86ceff4965cf4e26791d494a3d70f1bca18524a8a2d1f" + }, + { + "path": "assets/editorial.css", + "bytes": 12574, + "sha256": "fb2289d8cd79e7dd58117e588350c7e6e4b425be699af99ded1cfe1eac0e4e47" + }, + { + "path": "assets/horeca-1536.webp", + "bytes": 236248, + "sha256": "47ec8dd840d8aaaa1009cc1c79bfb0ca16773f987af3b857661a37a9d03cb99a" + }, + { + "path": "assets/horeca-480.webp", + "bytes": 37094, + "sha256": "b12876832cd94665f0a0396b6ae915b2deb04fef2927c24eff311619ca24ff47" + }, + { + "path": "assets/horeca-960.webp", + "bytes": 116668, + "sha256": "beeb4632678d55e6503a1b3326b493d8e5bbd7b1193c8683b706b6877f06919a" + }, + { + "path": "assets/it-subscription-1536.webp", + "bytes": 91866, + "sha256": "41b6308a5b8b936ba067e5b935f7ccb460b193e0c51015993558ffc6cd128e81" + }, + { + "path": "assets/it-subscription-480.webp", + "bytes": 16198, + "sha256": "5fc9fd775450b07b020d627cb78daa81d706c4fe7dbcbcaa0e22a6444f705a00" + }, + { + "path": "assets/it-subscription-960.webp", + "bytes": 46302, + "sha256": "8af2500c6f2eeebe3ecdba0beb9e2159656c4d9c88384c67c161ec616eeb1c08" + }, + { + "path": "assets/monitoring-security-1536.webp", + "bytes": 106710, + "sha256": "354c4755dcfe83ae67575228914d431ebda92cc853e787310476b7d4f030174a" + }, + { + "path": "assets/monitoring-security-480.webp", + "bytes": 17086, + "sha256": "fd855080fead0d2defaecde2cb91ce6f57b5a75d373de8d772ecf560083c3bfb" + }, + { + "path": "assets/monitoring-security-960.webp", + "bytes": 53216, + "sha256": "bd881ddb7f5cf3f5dd49ce243ce61fe69543cc95980629a5cf72b2293be733c7" + }, + { + "path": "assets/motion.css", + "bytes": 1265, + "sha256": "636fb027214143075c58d99e6d9cfe007c08a9cd5c4122c2316e06bd26ec0dcc" + }, + { + "path": "assets/motion.js", + "bytes": 1139, + "sha256": "612dcde5f733d6cc0512c2686965367198551e830f405f6a7d2e8444da8b4e49" + }, + { + "path": "assets/networks-vpn-1536.webp", + "bytes": 136714, + "sha256": "78efb3c01bc857d2c79e9313daeaebd8c13182480740dbdfa41b4f0e432b9745" + }, + { + "path": "assets/networks-vpn-480.webp", + "bytes": 21284, + "sha256": "38198e246acf1485f01de657aadb843bb68fdfa11df8b5d117e69d835e1eecf5" + }, + { + "path": "assets/networks-vpn-960.webp", + "bytes": 66250, + "sha256": "d9b61573e446211c797878ad92b8381f6aa4ba4ba671ae27b15f864369f4b19d" + }, + { + "path": "assets/photo-agriculture-1536.webp", + "bytes": 136382, + "sha256": "9c625b1cf9222e139689d483c7b84f77ab366d85be1a48f7c6e7f71eca4e138a" + }, + { + "path": "assets/photo-agriculture-480.webp", + "bytes": 27858, + "sha256": "5d15e89103a0e26f967f20d805eb6a6363e37fd35091ea7dd5d15ea9e3726d4b" + }, + { + "path": "assets/photo-agriculture-960.webp", + "bytes": 71602, + "sha256": "9b4cb1df300f01321ddd3a716958f6a4b655c3f438e9ea93cab22731cc472bf7" + }, + { + "path": "assets/photo-agriculture-ru-1536.webp", + "bytes": 118916, + "sha256": "05043e4987e389cc7e97c89371a44d75414a6193601923a1f838bcf55c2b7643" + }, + { + "path": "assets/photo-agriculture-ru-480.webp", + "bytes": 25988, + "sha256": "b6208022aca7703f694e6a38395edd2ea0947c52f5ff407a13071d05ee79d6e5" + }, + { + "path": "assets/photo-agriculture-ru-960.webp", + "bytes": 65566, + "sha256": "4a4ae828600b486fc82b6847c2749b3d0920e504ae5f2ac871db77a5bc9b26dd" + }, + { + "path": "assets/photo-automation-1536.webp", + "bytes": 127676, + "sha256": "1a35d8ddb87cf868e9077c7f7fca1f92ce458d3f67302f6aeca79283600d3687" + }, + { + "path": "assets/photo-automation-480.webp", + "bytes": 27506, + "sha256": "926561b70ea3dee3f7c3dbf8efd339354d489e819fcbb75528de9c74e7201f73" + }, + { + "path": "assets/photo-automation-960.webp", + "bytes": 73428, + "sha256": "80620ccc52795e438a16ad35c77166dc4fe87ec077ee62d59f108cef873a3c97" + }, + { + "path": "assets/photo-construction-1536.webp", + "bytes": 103804, + "sha256": "1ac4e3829523bd1077613dc9a0a0ebd62966798c570267bfac3ae7aeade2314e" + }, + { + "path": "assets/photo-construction-480.webp", + "bytes": 24646, + "sha256": "7d35ac4f014bc95fb3649f039a0acabecc7c980e373111b12f930db36151f8af" + }, + { + "path": "assets/photo-construction-960.webp", + "bytes": 61064, + "sha256": "28af23e212f768b672f29986bda90186e35856e02edfa5c671d637561507b523" + }, + { + "path": "assets/photo-construction-ru-1536.webp", + "bytes": 102312, + "sha256": "153a9c779d449582f1ecdf9bc3a66a3eca60c3f58fc609ba8b108e0fd7c30311" + }, + { + "path": "assets/photo-construction-ru-480.webp", + "bytes": 24120, + "sha256": "3c982175bf218d29b3169b16a0c8245aa4088c04d7fd5c6282d1354428d243d1" + }, + { + "path": "assets/photo-construction-ru-960.webp", + "bytes": 58410, + "sha256": "b68e1d5154e510d0dcab3ab8483cfaa092965857e78876f8f8651e86e88cca32" + }, + { + "path": "assets/photo-horeca-1536.webp", + "bytes": 103336, + "sha256": "690c3c987260ef683be38865f677c5be64612f89c4fe503bed702c2baaed23bc" + }, + { + "path": "assets/photo-horeca-480.webp", + "bytes": 22648, + "sha256": "9474aa44e616b05e94571e3aac8f52f3f302e59f090b1c8daff711c7c59e74ab" + }, + { + "path": "assets/photo-horeca-960.webp", + "bytes": 54012, + "sha256": "f1462026f5511f9c697711c95608c81099647444d66ef35fc9882b8798b95ce4" + }, + { + "path": "assets/photo-horeca-ru-1536.webp", + "bytes": 107046, + "sha256": "1e709e12a422daf6784f861547047726a8ca19b209cd9fa4ac2a2b98e4ad5946" + }, + { + "path": "assets/photo-horeca-ru-480.webp", + "bytes": 24264, + "sha256": "b26c8de1b632996d2dc9456e12a84ff5c8bb01a4dbef0dec35496a896c5fb297" + }, + { + "path": "assets/photo-horeca-ru-960.webp", + "bytes": 58722, + "sha256": "0d5362a66b7e00aecfe4aa987041d51910c5ac52bf63c6a13f9130eeddb20cd9" + }, + { + "path": "assets/photo-it-subscription-1536.webp", + "bytes": 128324, + "sha256": "0f551b0b2f1d2ff09ae953d40ab1aa99e0de71363dd17a807d2ac66c8dccd1f4" + }, + { + "path": "assets/photo-it-subscription-480.webp", + "bytes": 27776, + "sha256": "555cba166f5fc52472187e9e1f2d0dc63cf03821b0902331a1ab7e57ecbde819" + }, + { + "path": "assets/photo-it-subscription-960.webp", + "bytes": 67654, + "sha256": "b25181993b50c86b2802912e1262ad9388e6ffb29d9ee7f65b6aaeb475ade797" + }, + { + "path": "assets/photo-monitoring-security-1536.webp", + "bytes": 126088, + "sha256": "6f1a2ffeddf17e46fbda9ad26fc2f59d11d33c8fe0801ac9031b44aac06eae0b" + }, + { + "path": "assets/photo-monitoring-security-480.webp", + "bytes": 26826, + "sha256": "8b7fda9f49dcdd9a894099eb86602c11bc357fc5ee6c46d00d4462e1735402f1" + }, + { + "path": "assets/photo-monitoring-security-960.webp", + "bytes": 69118, + "sha256": "e0023a3fceee338eb11a6e164e5d11566dc528a979a0407d205928ca196e0ca0" + }, + { + "path": "assets/photo-networks-vpn-1536.webp", + "bytes": 144178, + "sha256": "596f68d0a7e33e4f33c0a538fc034a5bdc494f9d4a3e1d9db75fab638d5fb04a" + }, + { + "path": "assets/photo-networks-vpn-480.webp", + "bytes": 29080, + "sha256": "4426fbeebdcd89fb89592ae439ee81b7e0a891e9d739d23eec5284ac64eb6de5" + }, + { + "path": "assets/photo-networks-vpn-960.webp", + "bytes": 77720, + "sha256": "57480881f518a0ad7282df6f21bc6eadbbb75d056b6a088fdbc38a53d3c90f32" + }, + { + "path": "assets/photo-rapid-response-1536.webp", + "bytes": 90396, + "sha256": "64b2657438807d5f200a9d43b1542bdfa22804918315911919cd0aab815cded1" + }, + { + "path": "assets/photo-rapid-response-480.webp", + "bytes": 21230, + "sha256": "e7fff91bc9a4143ebfa00d430ea39767b978050671acb0b32962549cd0767287" + }, + { + "path": "assets/photo-rapid-response-960.webp", + "bytes": 50484, + "sha256": "fd3d510e414acfe393bba7701b72a1044ee981118f935525dac156b0fcdfc118" + }, + { + "path": "assets/photo-remote-desktop-1536.webp", + "bytes": 125836, + "sha256": "b4910beeab10f408769583bc5c34236f01033501f4e61668ea4325eaf67b98b1" + }, + { + "path": "assets/photo-remote-desktop-480.webp", + "bytes": 25384, + "sha256": "0c5af5f3de76925baa278621034b8e42b579ca22bf2414fbb3c7e445ec673d58" + }, + { + "path": "assets/photo-remote-desktop-960.webp", + "bytes": 67260, + "sha256": "9bfd4d3f09b5c1eca32b320e327ee3d48ce9b7c8d5a9f52c28be904a4d4a6f09" + }, + { + "path": "assets/photo-remote-sites-1536.webp", + "bytes": 148902, + "sha256": "99525507fbf854b006cfa9b6476e823c9a698adaf7ef0666ed2ffe2ce6083561" + }, + { + "path": "assets/photo-remote-sites-480.webp", + "bytes": 27656, + "sha256": "ba70cf8d6d098a1bc0362234b9f6f86e6df2bacb89deebd450fc1835efb7310d" + }, + { + "path": "assets/photo-remote-sites-960.webp", + "bytes": 77360, + "sha256": "320cb55f93f660868cdee995f27bc5527032673a4364f33384c37e5d0f858ad0" + }, + { + "path": "assets/photo-servers-hosting-1536.webp", + "bytes": 104664, + "sha256": "3254a91191a697189584349949532fb26491f7d9dc6a6f5342c1b383ca244c48" + }, + { + "path": "assets/photo-servers-hosting-480.webp", + "bytes": 21842, + "sha256": "d5dd4e0a5cbaba2f61ce470e18f2a9d0bb4afbac342a1030890f68130f992167" + }, + { + "path": "assets/photo-servers-hosting-960.webp", + "bytes": 57140, + "sha256": "ea3b8d269d79b972c368e44821b4cb110e0fa733673371afbef9c08e557efac3" + }, + { + "path": "assets/photo-video-surveillance-1536.webp", + "bytes": 167560, + "sha256": "4e11868832b747e58160573c9dc706cc520fbc238146f7e8ed9bb7963cd689e7" + }, + { + "path": "assets/photo-video-surveillance-480.webp", + "bytes": 38650, + "sha256": "8946f34d23b613cde2148eca92ff1819d0c7ea251d253e11d81800eee595c175" + }, + { + "path": "assets/photo-video-surveillance-960.webp", + "bytes": 98416, + "sha256": "95ef7d78485dc5ca357084509a7d92e4b09147d0a990ab4c3e7d0c18454605eb" + }, + { + "path": "assets/photo-video-surveillance-ru-1536.webp", + "bytes": 177434, + "sha256": "5c3f3e8f605dde85cc9c308ff3af4edee3ceb66f5e95c5b8d5c4c45408fb2e4d" + }, + { + "path": "assets/photo-video-surveillance-ru-480.webp", + "bytes": 42008, + "sha256": "1784c0e20b4d5c9832ceca4002251f2290e1383277dc1eaed72d01d63dae2e87" + }, + { + "path": "assets/photo-video-surveillance-ru-960.webp", + "bytes": 104434, + "sha256": "6e7eeb35e9bf037fad9c60ae8e29aea33f5bb9d1c71e50e7d572c1a309afc92a" + }, + { + "path": "assets/rapid-response-1536.webp", + "bytes": 93146, + "sha256": "3d77da7db2c5cb1395af7a992dfecf71d971c8bcf9be77e7a1ee5aeadc8bac68" + }, + { + "path": "assets/rapid-response-480.webp", + "bytes": 17016, + "sha256": "a912b29439c306b92730491fdc7cf2e66f77815f627c384cde6962d575b962a5" + }, + { + "path": "assets/rapid-response-960.webp", + "bytes": 48660, + "sha256": "3f4ea0e0dcfba5f7acf93054388571da7fdc418e29dbbf5c0971c3e0b7b2e774" + }, + { + "path": "assets/remote-desktop-1536.webp", + "bytes": 100842, + "sha256": "3579fa08efb75a5b499e26af49082823962bee6c6f2425dcfa63212d63e358a3" + }, + { + "path": "assets/remote-desktop-480.webp", + "bytes": 18244, + "sha256": "3767188d160a0f6faa12650c78a840134ccf2685729fefc53876a6ee59919da2" + }, + { + "path": "assets/remote-desktop-960.webp", + "bytes": 51374, + "sha256": "97b24a59d5764d28d8fd42c2ac4f4b2bf5ab7c0e8d260088bd7f5fffd620ba1b" + }, + { + "path": "assets/remote-sites-1536.webp", + "bytes": 167892, + "sha256": "01d49ac63c1b96ad85ab4e29ac9477951ccfd879b58670eb3f3c62f8042482f8" + }, + { + "path": "assets/remote-sites-480.webp", + "bytes": 26030, + "sha256": "e16a12315cde12c94ca32f4b39e740a9450870014db7d1e04639c8a997686415" + }, + { + "path": "assets/remote-sites-960.webp", + "bytes": 83688, + "sha256": "5482117e83b6d107ab1bb173a39daad64ad7669982596f9d1269fac6dd3c198d" + }, + { + "path": "assets/servers-hosting-1536.webp", + "bytes": 107668, + "sha256": "ceb3974a6908fbc646de464cf4989339bdcbf3232dd438f8f52116039330c3d3" + }, + { + "path": "assets/servers-hosting-480.webp", + "bytes": 15398, + "sha256": "6bf480b68dae5ea7d7df876e7ea4e4f7458d46f10bb4d057eb7a0b99ca0f84c9" + }, + { + "path": "assets/servers-hosting-960.webp", + "bytes": 49298, + "sha256": "f24c62785bd0576c6401fb2fc3a0de52b6269decc579319069e61bf94ccecc3c" + }, + { + "path": "assets/video-surveillance-1536.webp", + "bytes": 126936, + "sha256": "d4139267e8f2e6e60aab5c48a068c9812b84803203aaf0580eb14db983e05db8" + }, + { + "path": "assets/video-surveillance-480.webp", + "bytes": 19212, + "sha256": "e18153c2572624843d4dcebc2cbdb19d081badcd44c6e48bac80f2ac16717391" + }, + { + "path": "assets/video-surveillance-960.webp", + "bytes": 60030, + "sha256": "76189da0303bc5903d71c7bab4512991495c6a4308244867952a51defe1b648e" + }, + { + "path": "content/card-copy.json", + "bytes": 4175, + "sha256": "2d35f8ed727c11ee16da538a6953787664449af760eaac9817fb9942d8e6cf04" + }, + { + "path": "content/flow-scenes.json", + "bytes": 2510, + "sha256": "cfefa76c2a0278ad4c67b76f7254d3db6081199e430e3f1b2668c8bcf4e5e9d6" + }, + { + "path": "content/image-manifest.json", + "bytes": 993, + "sha256": "a645923f914758632e01372a05f751b217cae812f8a9864b605cd30753634967" + }, + { + "path": "content/image-motion.json", + "bytes": 1758, + "sha256": "ebf3335bafa80b2cf7e02e1d9f7f9f645a43ce6be026e6c79690ef58a9b9163b" + }, + { + "path": "content/image-prompts.json", + "bytes": 3703, + "sha256": "77630b28d6851957b8b5573ff9749a01c1890dbf5114a9af450f8488acb36184" + }, + { + "path": "content/pages.json", + "bytes": 68685, + "sha256": "cc5af56c763fabbeb68cfb4d2a640bfb3b60a6f8700ab5f1aed11b5710c16503" + }, + { + "path": "content/photo-alt.json", + "bytes": 1877, + "sha256": "795811b3257dfc743fdc9e61eb1b3c2243d95e6b2d3691c7868b9426edcfe859" + }, + { + "path": "content/photo-edit-prompts.json", + "bytes": 2312, + "sha256": "6cc200fa5e9f79da2eece7a4fcfb43ea2cc772f890b4795ac7ea3cfb18bbc94a" + }, + { + "path": "content/photo-manifest.json", + "bytes": 1327, + "sha256": "fb7b6c1a8f376650d92e808221e8cbb723340f911121b65b5dda3dfb0a94464f" + }, + { + "path": "content/photo-prompts.json", + "bytes": 4360, + "sha256": "be8ffae1aa27bc099e6c616871356b2da02ea0403c27228e79163f7340860c8a" + }, + { + "path": "content/privacy-notes.json", + "bytes": 3852, + "sha256": "a58b49cf4ad16baa2a65cdf4cff576cb9c5d6d4b670d5a13493d8f30e9915729" + }, + { + "path": "imagegen-raw/exec-02d51137-9275-4107-aab0-b3aec51a1dad.png", + "bytes": 2147875, + "sha256": "fbb7cb9719a7b2e7df1c5676b17a2fcd8455ae48f120af362118ef5b978ab246" + }, + { + "path": "imagegen-raw/exec-1b28dbd9-1b57-45e2-b54f-c383d56d6060.png", + "bytes": 2019455, + "sha256": "a915b522b5fcda922f0c7c55ec8edc72a9b524da4634155962e89a7f49f93735" + }, + { + "path": "imagegen-raw/exec-1e275585-1588-432a-bc1e-fd15c7b85927.png", + "bytes": 2459341, + "sha256": "735364d09ba3eee09375fa02c5967c36b24c5d9a1faa2f7ad60c9b1e9dd64c98" + }, + { + "path": "imagegen-raw/exec-1ee5178f-425c-418b-a035-f0ee471c9785.png", + "bytes": 2234101, + "sha256": "c0d87a01a19d77066b09bf09f0bb5c22f49ba9a76d0288654e2769befa7286bb" + }, + { + "path": "imagegen-raw/exec-39369184-d328-4ad5-9f41-eddfeb94508f.png", + "bytes": 2146998, + "sha256": "00f2a6fbdd3f79c398a0bdb94be9f150ffa3dda5c4b7005713ea6cbb8a84e7da" + }, + { + "path": "imagegen-raw/exec-4b3155ff-9827-4ae2-a0ec-5a75d8e53a58.png", + "bytes": 1858936, + "sha256": "b502740b92f77d2ed188da70f213986d9e679617f8e564fa9097ea597adc221f" + }, + { + "path": "imagegen-raw/exec-5f0f5101-6c0b-448b-b0a1-71ba1a0824d1.png", + "bytes": 1957116, + "sha256": "60d3ed076ee1cb6ea61e1ce88a15a0b8fc948b027f2e7ba06d5ff6ba8521d949" + }, + { + "path": "imagegen-raw/exec-61eacaed-d2f3-4955-9727-0050b3833f5c.png", + "bytes": 1856373, + "sha256": "09940f4b92266d58ca16be5c29bd1cfda86c8e448dfd4cf42d7c9dec936cc5e3" + }, + { + "path": "imagegen-raw/exec-62f4909d-76c8-4a92-b8de-b8a52886fda4.png", + "bytes": 2026931, + "sha256": "8182d1dfb2c1603f86805a9903fcef9ab51a2c3f144f2dbd45d5c692dc41f320" + }, + { + "path": "imagegen-raw/exec-6b233f08-5a14-47bc-a0ff-f5764ee81358.png", + "bytes": 2591922, + "sha256": "49417046c9a59fd001066881d09ec0980553fb29a668af2bd79df1943e770b83" + }, + { + "path": "imagegen-raw/exec-6ebb0e96-dbdb-42fc-b961-deac1bcc47e4.png", + "bytes": 1928162, + "sha256": "545b7dae63c019c87bba6f9a8c025435a692cf3cf207efbdaf2a0c8425f7792d" + }, + { + "path": "imagegen-raw/exec-77c5b007-4c9a-4c06-a2ba-998165ba31af.png", + "bytes": 2227864, + "sha256": "3cab490cf3ab337b33bb8271ee72d7b3617bb6d328006f8d3974cb689b6383b2" + }, + { + "path": "imagegen-raw/exec-8a0cd1c3-cee8-4730-94da-efe1284423e3.png", + "bytes": 2254204, + "sha256": "52a4f1f6d686ea7533b64eeb27d147396fac446e1151f0cabe977eba84f17da9" + }, + { + "path": "imagegen-raw/exec-8f67ef1d-5fb4-4fd6-9173-be51861b4f49.png", + "bytes": 1855721, + "sha256": "586df166b670707aea5b44257beee35c3d599c01437d78d82e94b502ac1684f8" + }, + { + "path": "imagegen-raw/exec-93d89369-e112-40c8-b145-0bb9a6aebd5b.png", + "bytes": 2000971, + "sha256": "2316f92788906fff0e46e51f337f3db046cb39b958b30721bc14f1f78e31c7af" + }, + { + "path": "imagegen-raw/exec-9c6feef1-82fd-4c82-841e-7dfdd1eda43d.png", + "bytes": 2060967, + "sha256": "155c17a595ce2a669a7586d38e51ee4cac1bcd9fbe3b90d5a3c7d5b5c31603f3" + }, + { + "path": "imagegen-raw/exec-9eae21ab-8e29-4bde-a7a0-16ff60198e85.png", + "bytes": 2311691, + "sha256": "02b8e1b31930d59411b7878b3a97e675593caa57c845a1744252f1b590c97c2b" + }, + { + "path": "imagegen-raw/exec-a4670691-b05c-4508-90d6-be9b0e364550.png", + "bytes": 2109612, + "sha256": "a13ea734f2435be1984b0b97f986e78d84a27a403813b512865f527547972d18" + }, + { + "path": "imagegen-raw/exec-a7186d04-ce0a-4b37-b693-a6e11a8d446e.png", + "bytes": 2506550, + "sha256": "34a4b6d54951c817b37699e2fe199fd0e196141818675173bb31d4892ea95c6c" + }, + { + "path": "imagegen-raw/exec-a831e3ef-b8b0-438b-b3b4-41cd1c986465.png", + "bytes": 2263701, + "sha256": "146a9c2c5a8d363df61879ff4620bad18930420546aa4da0cad75d4eb8a45c21" + }, + { + "path": "imagegen-raw/exec-afb4de23-8a8f-4bb9-b7c9-b4340eac4634.png", + "bytes": 1928760, + "sha256": "c4a5f046ea78590d30e3aebe52df6799a2d597715fd1eda21e9f87d81b16cc6d" + }, + { + "path": "imagegen-raw/exec-b37ae9f3-1290-47d8-8422-535881431064.png", + "bytes": 2337420, + "sha256": "697d3921233b19f46a789a57752c37109f59163b1870379652788828a6422bcc" + }, + { + "path": "imagegen-raw/exec-b6ffe55d-e553-40d2-a091-9def97ab9945.png", + "bytes": 1893214, + "sha256": "70f575bedecc2dca777bbbcda53db5564d5057c711b8754f8e205d07962b1cc9" + }, + { + "path": "imagegen-raw/exec-cd106f52-885c-43b2-885a-03f9c7e93dae.png", + "bytes": 2131432, + "sha256": "477d07c3cb051a14bf5dcc45192a3c007708f438cdac684a8e4996d38b159547" + }, + { + "path": "imagegen-raw/exec-d3faf4a3-0cc1-4829-801c-ce9ddfc20067.png", + "bytes": 1932910, + "sha256": "34c7a27b62343092e5b666498bd32df7edb4395e6435c339bfd257ba32acfa88" + }, + { + "path": "imagegen-raw/exec-e0a9d62c-84c6-47b5-98e6-7ce83011c1f9.png", + "bytes": 2115901, + "sha256": "590d30389cdec559f136c6196730319d553e4388b4ac5945f196ec1be432c1db" + }, + { + "path": "imagegen-raw/exec-e6458072-925a-4eb2-840a-1c4977c979b1.png", + "bytes": 2122884, + "sha256": "8250ded29bba18cca23576da0d17aef9b6c7affb2be3dad17afe169b10e50f9d" + }, + { + "path": "imagegen-raw/exec-e9c22a40-e210-4f73-becc-3fc54312fe35.png", + "bytes": 2444353, + "sha256": "737afa550de774d0cca9f95537151a1cc0391fa963fe851296a536f2f4567cd7" + }, + { + "path": "imagegen-raw/exec-f42c374b-ac2e-460f-9c2e-cbe43405f8a9.png", + "bytes": 2193261, + "sha256": "e0573a72ad92affcc252b88492968b7e26e20fd719ca18c3e92aafbd0f0bab2f" + }, + { + "path": "imagegen-raw/exec-f7a9557c-4473-4560-82d8-3fdba4a25eba.png", + "bytes": 2647629, + "sha256": "5997fd7e1797f28610dde42ed22dead3e1fabcf6109d54b21b9473af3c46be3b" + }, + { + "path": "imagegen-raw/exec-fbbb25e2-d453-4003-b933-13105e209940.png", + "bytes": 2581983, + "sha256": "fb8d834212db29c244e2ff85381782a17a04bbfec57063e999631e8698c0df36" + }, + { + "path": "imagegen-raw/photo-edit-agriculture.png", + "bytes": 2043752, + "sha256": "be6129fafbd711242b8063142fc26b719745047306947f4de30ac462ce42c7f4" + }, + { + "path": "imagegen-raw/photo-edit-construction.png", + "bytes": 1910833, + "sha256": "7b96bc1574ed0d7c3af4c08e8bea18e42d17465edbc77b58266687fba8334da6" + }, + { + "path": "imagegen-raw/photo-edit-horeca.png", + "bytes": 1983761, + "sha256": "de6ef4986ef70d21372352f3f5308e140ccb311562198ea83c10025b9bb8ef24" + }, + { + "path": "imagegen-raw/photo-edit-video-surveillance.png", + "bytes": 2388355, + "sha256": "3de1de85a6d4c92ef83744f7be94b8b74b421783fadd0862979614960d99017f" + }, + { + "path": "public/approach/index.html", + "bytes": 9351, + "sha256": "26a40cadcd32697c579a8f61992e17ef8107902fb15ae286b46622da64979eef" + }, + { + "path": "public/approach/it-subscription/index.html", + "bytes": 23147, + "sha256": "8b8f556322a1fb1ff1636eb2cba288cea9ee565ed40341c5c7bd7348487cae67" + }, + { + "path": "public/approach/rapid-response/index.html", + "bytes": 23352, + "sha256": "b45e2306921c4b9db5345448235bf89bb44a060fd3cc02ca71aea67a7d374752" + }, + { + "path": "public/approach/remote-sites/index.html", + "bytes": 23923, + "sha256": "d5fcb620690b4632fed4e6eae1065bef04645dc62c177f2b681001f831789f8d" + }, + { + "path": "public/assets/editorial/agriculture-1536.webp", + "bytes": 213438, + "sha256": "0620c8848fa19b06eba11f03b427b073125f576be61b7a37a24e99f1983d2529" + }, + { + "path": "public/assets/editorial/agriculture-480.webp", + "bytes": 30138, + "sha256": "ca6783ae677b83d2046432ffc11709eab5a6257742784a336c6c449668107b05" + }, + { + "path": "public/assets/editorial/agriculture-960.webp", + "bytes": 101508, + "sha256": "7f3b65935494197fb34f704d7d8622e515f5060880ff400fe89cb44b870b402a" + }, + { + "path": "public/assets/editorial/automation-1536.webp", + "bytes": 103890, + "sha256": "2ac74affac2f77df7570791611608ca3871a6f411cbd12821c72406626772572" + }, + { + "path": "public/assets/editorial/automation-480.webp", + "bytes": 20552, + "sha256": "5d94300a756413f0e6e17df2457dfafcf96ceab725a16716295b2838fcc3758f" + }, + { + "path": "public/assets/editorial/automation-960.webp", + "bytes": 55244, + "sha256": "1456ba92c329ae3ac458561eac19652fe2814eaccef652bb13368862be209095" + }, + { + "path": "public/assets/editorial/construction-1536.webp", + "bytes": 218014, + "sha256": "5717c1fc9ea1cfaaf29f2e6482ff69bfe702f684980f30faa7cb0fa672ae94c9" + }, + { + "path": "public/assets/editorial/construction-480.webp", + "bytes": 28678, + "sha256": "1949a7d869cda57fcd4299ddb70c826748af461efe9f618f8026cd7779b6eb01" + }, + { + "path": "public/assets/editorial/construction-960.webp", + "bytes": 101112, + "sha256": "ef22f37ab3d466f382a86ceff4965cf4e26791d494a3d70f1bca18524a8a2d1f" + }, + { + "path": "public/assets/editorial/editorial.css", + "bytes": 12574, + "sha256": "fb2289d8cd79e7dd58117e588350c7e6e4b425be699af99ded1cfe1eac0e4e47" + }, + { + "path": "public/assets/editorial/horeca-1536.webp", + "bytes": 236248, + "sha256": "47ec8dd840d8aaaa1009cc1c79bfb0ca16773f987af3b857661a37a9d03cb99a" + }, + { + "path": "public/assets/editorial/horeca-480.webp", + "bytes": 37094, + "sha256": "b12876832cd94665f0a0396b6ae915b2deb04fef2927c24eff311619ca24ff47" + }, + { + "path": "public/assets/editorial/horeca-960.webp", + "bytes": 116668, + "sha256": "beeb4632678d55e6503a1b3326b493d8e5bbd7b1193c8683b706b6877f06919a" + }, + { + "path": "public/assets/editorial/it-subscription-1536.webp", + "bytes": 91866, + "sha256": "41b6308a5b8b936ba067e5b935f7ccb460b193e0c51015993558ffc6cd128e81" + }, + { + "path": "public/assets/editorial/it-subscription-480.webp", + "bytes": 16198, + "sha256": "5fc9fd775450b07b020d627cb78daa81d706c4fe7dbcbcaa0e22a6444f705a00" + }, + { + "path": "public/assets/editorial/it-subscription-960.webp", + "bytes": 46302, + "sha256": "8af2500c6f2eeebe3ecdba0beb9e2159656c4d9c88384c67c161ec616eeb1c08" + }, + { + "path": "public/assets/editorial/monitoring-security-1536.webp", + "bytes": 106710, + "sha256": "354c4755dcfe83ae67575228914d431ebda92cc853e787310476b7d4f030174a" + }, + { + "path": "public/assets/editorial/monitoring-security-480.webp", + "bytes": 17086, + "sha256": "fd855080fead0d2defaecde2cb91ce6f57b5a75d373de8d772ecf560083c3bfb" + }, + { + "path": "public/assets/editorial/monitoring-security-960.webp", + "bytes": 53216, + "sha256": "bd881ddb7f5cf3f5dd49ce243ce61fe69543cc95980629a5cf72b2293be733c7" + }, + { + "path": "public/assets/editorial/motion.css", + "bytes": 1265, + "sha256": "636fb027214143075c58d99e6d9cfe007c08a9cd5c4122c2316e06bd26ec0dcc" + }, + { + "path": "public/assets/editorial/motion.js", + "bytes": 1139, + "sha256": "612dcde5f733d6cc0512c2686965367198551e830f405f6a7d2e8444da8b4e49" + }, + { + "path": "public/assets/editorial/networks-vpn-1536.webp", + "bytes": 136714, + "sha256": "78efb3c01bc857d2c79e9313daeaebd8c13182480740dbdfa41b4f0e432b9745" + }, + { + "path": "public/assets/editorial/networks-vpn-480.webp", + "bytes": 21284, + "sha256": "38198e246acf1485f01de657aadb843bb68fdfa11df8b5d117e69d835e1eecf5" + }, + { + "path": "public/assets/editorial/networks-vpn-960.webp", + "bytes": 66250, + "sha256": "d9b61573e446211c797878ad92b8381f6aa4ba4ba671ae27b15f864369f4b19d" + }, + { + "path": "public/assets/editorial/photo-agriculture-1536.webp", + "bytes": 136382, + "sha256": "9c625b1cf9222e139689d483c7b84f77ab366d85be1a48f7c6e7f71eca4e138a" + }, + { + "path": "public/assets/editorial/photo-agriculture-480.webp", + "bytes": 27858, + "sha256": "5d15e89103a0e26f967f20d805eb6a6363e37fd35091ea7dd5d15ea9e3726d4b" + }, + { + "path": "public/assets/editorial/photo-agriculture-960.webp", + "bytes": 71602, + "sha256": "9b4cb1df300f01321ddd3a716958f6a4b655c3f438e9ea93cab22731cc472bf7" + }, + { + "path": "public/assets/editorial/photo-agriculture-ru-1536.webp", + "bytes": 118916, + "sha256": "05043e4987e389cc7e97c89371a44d75414a6193601923a1f838bcf55c2b7643" + }, + { + "path": "public/assets/editorial/photo-agriculture-ru-480.webp", + "bytes": 25988, + "sha256": "b6208022aca7703f694e6a38395edd2ea0947c52f5ff407a13071d05ee79d6e5" + }, + { + "path": "public/assets/editorial/photo-agriculture-ru-960.webp", + "bytes": 65566, + "sha256": "4a4ae828600b486fc82b6847c2749b3d0920e504ae5f2ac871db77a5bc9b26dd" + }, + { + "path": "public/assets/editorial/photo-automation-1536.webp", + "bytes": 127676, + "sha256": "1a35d8ddb87cf868e9077c7f7fca1f92ce458d3f67302f6aeca79283600d3687" + }, + { + "path": "public/assets/editorial/photo-automation-480.webp", + "bytes": 27506, + "sha256": "926561b70ea3dee3f7c3dbf8efd339354d489e819fcbb75528de9c74e7201f73" + }, + { + "path": "public/assets/editorial/photo-automation-960.webp", + "bytes": 73428, + "sha256": "80620ccc52795e438a16ad35c77166dc4fe87ec077ee62d59f108cef873a3c97" + }, + { + "path": "public/assets/editorial/photo-construction-1536.webp", + "bytes": 103804, + "sha256": "1ac4e3829523bd1077613dc9a0a0ebd62966798c570267bfac3ae7aeade2314e" + }, + { + "path": "public/assets/editorial/photo-construction-480.webp", + "bytes": 24646, + "sha256": "7d35ac4f014bc95fb3649f039a0acabecc7c980e373111b12f930db36151f8af" + }, + { + "path": "public/assets/editorial/photo-construction-960.webp", + "bytes": 61064, + "sha256": "28af23e212f768b672f29986bda90186e35856e02edfa5c671d637561507b523" + }, + { + "path": "public/assets/editorial/photo-construction-ru-1536.webp", + "bytes": 102312, + "sha256": "153a9c779d449582f1ecdf9bc3a66a3eca60c3f58fc609ba8b108e0fd7c30311" + }, + { + "path": "public/assets/editorial/photo-construction-ru-480.webp", + "bytes": 24120, + "sha256": "3c982175bf218d29b3169b16a0c8245aa4088c04d7fd5c6282d1354428d243d1" + }, + { + "path": "public/assets/editorial/photo-construction-ru-960.webp", + "bytes": 58410, + "sha256": "b68e1d5154e510d0dcab3ab8483cfaa092965857e78876f8f8651e86e88cca32" + }, + { + "path": "public/assets/editorial/photo-horeca-1536.webp", + "bytes": 103336, + "sha256": "690c3c987260ef683be38865f677c5be64612f89c4fe503bed702c2baaed23bc" + }, + { + "path": "public/assets/editorial/photo-horeca-480.webp", + "bytes": 22648, + "sha256": "9474aa44e616b05e94571e3aac8f52f3f302e59f090b1c8daff711c7c59e74ab" + }, + { + "path": "public/assets/editorial/photo-horeca-960.webp", + "bytes": 54012, + "sha256": "f1462026f5511f9c697711c95608c81099647444d66ef35fc9882b8798b95ce4" + }, + { + "path": "public/assets/editorial/photo-horeca-ru-1536.webp", + "bytes": 107046, + "sha256": "1e709e12a422daf6784f861547047726a8ca19b209cd9fa4ac2a2b98e4ad5946" + }, + { + "path": "public/assets/editorial/photo-horeca-ru-480.webp", + "bytes": 24264, + "sha256": "b26c8de1b632996d2dc9456e12a84ff5c8bb01a4dbef0dec35496a896c5fb297" + }, + { + "path": "public/assets/editorial/photo-horeca-ru-960.webp", + "bytes": 58722, + "sha256": "0d5362a66b7e00aecfe4aa987041d51910c5ac52bf63c6a13f9130eeddb20cd9" + }, + { + "path": "public/assets/editorial/photo-it-subscription-1536.webp", + "bytes": 128324, + "sha256": "0f551b0b2f1d2ff09ae953d40ab1aa99e0de71363dd17a807d2ac66c8dccd1f4" + }, + { + "path": "public/assets/editorial/photo-it-subscription-480.webp", + "bytes": 27776, + "sha256": "555cba166f5fc52472187e9e1f2d0dc63cf03821b0902331a1ab7e57ecbde819" + }, + { + "path": "public/assets/editorial/photo-it-subscription-960.webp", + "bytes": 67654, + "sha256": "b25181993b50c86b2802912e1262ad9388e6ffb29d9ee7f65b6aaeb475ade797" + }, + { + "path": "public/assets/editorial/photo-monitoring-security-1536.webp", + "bytes": 126088, + "sha256": "6f1a2ffeddf17e46fbda9ad26fc2f59d11d33c8fe0801ac9031b44aac06eae0b" + }, + { + "path": "public/assets/editorial/photo-monitoring-security-480.webp", + "bytes": 26826, + "sha256": "8b7fda9f49dcdd9a894099eb86602c11bc357fc5ee6c46d00d4462e1735402f1" + }, + { + "path": "public/assets/editorial/photo-monitoring-security-960.webp", + "bytes": 69118, + "sha256": "e0023a3fceee338eb11a6e164e5d11566dc528a979a0407d205928ca196e0ca0" + }, + { + "path": "public/assets/editorial/photo-networks-vpn-1536.webp", + "bytes": 144178, + "sha256": "596f68d0a7e33e4f33c0a538fc034a5bdc494f9d4a3e1d9db75fab638d5fb04a" + }, + { + "path": "public/assets/editorial/photo-networks-vpn-480.webp", + "bytes": 29080, + "sha256": "4426fbeebdcd89fb89592ae439ee81b7e0a891e9d739d23eec5284ac64eb6de5" + }, + { + "path": "public/assets/editorial/photo-networks-vpn-960.webp", + "bytes": 77720, + "sha256": "57480881f518a0ad7282df6f21bc6eadbbb75d056b6a088fdbc38a53d3c90f32" + }, + { + "path": "public/assets/editorial/photo-rapid-response-1536.webp", + "bytes": 90396, + "sha256": "64b2657438807d5f200a9d43b1542bdfa22804918315911919cd0aab815cded1" + }, + { + "path": "public/assets/editorial/photo-rapid-response-480.webp", + "bytes": 21230, + "sha256": "e7fff91bc9a4143ebfa00d430ea39767b978050671acb0b32962549cd0767287" + }, + { + "path": "public/assets/editorial/photo-rapid-response-960.webp", + "bytes": 50484, + "sha256": "fd3d510e414acfe393bba7701b72a1044ee981118f935525dac156b0fcdfc118" + }, + { + "path": "public/assets/editorial/photo-remote-desktop-1536.webp", + "bytes": 125836, + "sha256": "b4910beeab10f408769583bc5c34236f01033501f4e61668ea4325eaf67b98b1" + }, + { + "path": "public/assets/editorial/photo-remote-desktop-480.webp", + "bytes": 25384, + "sha256": "0c5af5f3de76925baa278621034b8e42b579ca22bf2414fbb3c7e445ec673d58" + }, + { + "path": "public/assets/editorial/photo-remote-desktop-960.webp", + "bytes": 67260, + "sha256": "9bfd4d3f09b5c1eca32b320e327ee3d48ce9b7c8d5a9f52c28be904a4d4a6f09" + }, + { + "path": "public/assets/editorial/photo-remote-sites-1536.webp", + "bytes": 148902, + "sha256": "99525507fbf854b006cfa9b6476e823c9a698adaf7ef0666ed2ffe2ce6083561" + }, + { + "path": "public/assets/editorial/photo-remote-sites-480.webp", + "bytes": 27656, + "sha256": "ba70cf8d6d098a1bc0362234b9f6f86e6df2bacb89deebd450fc1835efb7310d" + }, + { + "path": "public/assets/editorial/photo-remote-sites-960.webp", + "bytes": 77360, + "sha256": "320cb55f93f660868cdee995f27bc5527032673a4364f33384c37e5d0f858ad0" + }, + { + "path": "public/assets/editorial/photo-servers-hosting-1536.webp", + "bytes": 104664, + "sha256": "3254a91191a697189584349949532fb26491f7d9dc6a6f5342c1b383ca244c48" + }, + { + "path": "public/assets/editorial/photo-servers-hosting-480.webp", + "bytes": 21842, + "sha256": "d5dd4e0a5cbaba2f61ce470e18f2a9d0bb4afbac342a1030890f68130f992167" + }, + { + "path": "public/assets/editorial/photo-servers-hosting-960.webp", + "bytes": 57140, + "sha256": "ea3b8d269d79b972c368e44821b4cb110e0fa733673371afbef9c08e557efac3" + }, + { + "path": "public/assets/editorial/photo-video-surveillance-1536.webp", + "bytes": 167560, + "sha256": "4e11868832b747e58160573c9dc706cc520fbc238146f7e8ed9bb7963cd689e7" + }, + { + "path": "public/assets/editorial/photo-video-surveillance-480.webp", + "bytes": 38650, + "sha256": "8946f34d23b613cde2148eca92ff1819d0c7ea251d253e11d81800eee595c175" + }, + { + "path": "public/assets/editorial/photo-video-surveillance-960.webp", + "bytes": 98416, + "sha256": "95ef7d78485dc5ca357084509a7d92e4b09147d0a990ab4c3e7d0c18454605eb" + }, + { + "path": "public/assets/editorial/photo-video-surveillance-ru-1536.webp", + "bytes": 177434, + "sha256": "5c3f3e8f605dde85cc9c308ff3af4edee3ceb66f5e95c5b8d5c4c45408fb2e4d" + }, + { + "path": "public/assets/editorial/photo-video-surveillance-ru-480.webp", + "bytes": 42008, + "sha256": "1784c0e20b4d5c9832ceca4002251f2290e1383277dc1eaed72d01d63dae2e87" + }, + { + "path": "public/assets/editorial/photo-video-surveillance-ru-960.webp", + "bytes": 104434, + "sha256": "6e7eeb35e9bf037fad9c60ae8e29aea33f5bb9d1c71e50e7d572c1a309afc92a" + }, + { + "path": "public/assets/editorial/rapid-response-1536.webp", + "bytes": 93146, + "sha256": "3d77da7db2c5cb1395af7a992dfecf71d971c8bcf9be77e7a1ee5aeadc8bac68" + }, + { + "path": "public/assets/editorial/rapid-response-480.webp", + "bytes": 17016, + "sha256": "a912b29439c306b92730491fdc7cf2e66f77815f627c384cde6962d575b962a5" + }, + { + "path": "public/assets/editorial/rapid-response-960.webp", + "bytes": 48660, + "sha256": "3f4ea0e0dcfba5f7acf93054388571da7fdc418e29dbbf5c0971c3e0b7b2e774" + }, + { + "path": "public/assets/editorial/remote-desktop-1536.webp", + "bytes": 100842, + "sha256": "3579fa08efb75a5b499e26af49082823962bee6c6f2425dcfa63212d63e358a3" + }, + { + "path": "public/assets/editorial/remote-desktop-480.webp", + "bytes": 18244, + "sha256": "3767188d160a0f6faa12650c78a840134ccf2685729fefc53876a6ee59919da2" + }, + { + "path": "public/assets/editorial/remote-desktop-960.webp", + "bytes": 51374, + "sha256": "97b24a59d5764d28d8fd42c2ac4f4b2bf5ab7c0e8d260088bd7f5fffd620ba1b" + }, + { + "path": "public/assets/editorial/remote-sites-1536.webp", + "bytes": 167892, + "sha256": "01d49ac63c1b96ad85ab4e29ac9477951ccfd879b58670eb3f3c62f8042482f8" + }, + { + "path": "public/assets/editorial/remote-sites-480.webp", + "bytes": 26030, + "sha256": "e16a12315cde12c94ca32f4b39e740a9450870014db7d1e04639c8a997686415" + }, + { + "path": "public/assets/editorial/remote-sites-960.webp", + "bytes": 83688, + "sha256": "5482117e83b6d107ab1bb173a39daad64ad7669982596f9d1269fac6dd3c198d" + }, + { + "path": "public/assets/editorial/servers-hosting-1536.webp", + "bytes": 107668, + "sha256": "ceb3974a6908fbc646de464cf4989339bdcbf3232dd438f8f52116039330c3d3" + }, + { + "path": "public/assets/editorial/servers-hosting-480.webp", + "bytes": 15398, + "sha256": "6bf480b68dae5ea7d7df876e7ea4e4f7458d46f10bb4d057eb7a0b99ca0f84c9" + }, + { + "path": "public/assets/editorial/servers-hosting-960.webp", + "bytes": 49298, + "sha256": "f24c62785bd0576c6401fb2fc3a0de52b6269decc579319069e61bf94ccecc3c" + }, + { + "path": "public/assets/editorial/video-surveillance-1536.webp", + "bytes": 126936, + "sha256": "d4139267e8f2e6e60aab5c48a068c9812b84803203aaf0580eb14db983e05db8" + }, + { + "path": "public/assets/editorial/video-surveillance-480.webp", + "bytes": 19212, + "sha256": "e18153c2572624843d4dcebc2cbdb19d081badcd44c6e48bac80f2ac16717391" + }, + { + "path": "public/assets/editorial/video-surveillance-960.webp", + "bytes": 60030, + "sha256": "76189da0303bc5903d71c7bab4512991495c6a4308244867952a51defe1b648e" + }, + { + "path": "public/img/construction.png", + "bytes": 2133417, + "sha256": "67f4fbdbf6205e2e4ca88763611fa3cbb09eaa44c8c8acb86a37671a4e1cf156" + }, + { + "path": "public/img/farms.png", + "bytes": 2438466, + "sha256": "5e746da7bd97bee937df66f378f7d49bf6556e6c563260d124ea4db4cdd6acbc" + }, + { + "path": "public/img/mountains.png", + "bytes": 2557280, + "sha256": "fa9cec37ab1984a65767748137a8226ce3f2e67c794be492d5e321d126b5faf1" + }, + { + "path": "public/img/office.png", + "bytes": 1980826, + "sha256": "f651c474f671699dfd28692cb1571bc73512f3ff1feee7056e9892d84184695b" + }, + { + "path": "public/img/resorts.png", + "bytes": 2456335, + "sha256": "75e8fedc30c7405118d4d7e271d9bde128322bcd1f328d370f7c57828c8b5cbc" + }, + { + "path": "public/img/restaurant.png", + "bytes": 2383609, + "sha256": "1571dc890a4d31cfaa8acf371b230aaab535fb724edd1e4ece7a1062a222e34a" + }, + { + "path": "public/img/servers.png", + "bytes": 1939634, + "sha256": "04a22a151c2232d35666917bb411cd76217e2b4fbd58d4c141050dfc42b42820" + }, + { + "path": "public/index.html", + "bytes": 139215, + "sha256": "21a4778fafdfa32bfc04cff091d86238fa2850367892b20f54e67365c8cb9415" + }, + { + "path": "public/industries/agriculture/index.html", + "bytes": 24043, + "sha256": "a07544a4a613932e4071450c5143bbe7ded1189e0abe2f9d4170a62a2c18a6e6" + }, + { + "path": "public/industries/construction/index.html", + "bytes": 24401, + "sha256": "eaa8914a1e2ef0491d38c090cf1fb63e15a49803749a1cf0aef9f63a69abff48" + }, + { + "path": "public/industries/horeca/index.html", + "bytes": 24283, + "sha256": "b66497e7a3a46c36d01c5301db04268d93c548ea3656be03b45dc24b1a32dbc6" + }, + { + "path": "public/industries/index.html", + "bytes": 9423, + "sha256": "798fa4c5e684009bbe7fa343df9be04d5d8ea9ee5a955202a88aaa50c09d93c5" + }, + { + "path": "public/robots.txt", + "bytes": 72, + "sha256": "834ca37137ed86bbedd14e1c0f4c4dccf4c980f7120026535afa23e2fd85f026" + }, + { + "path": "public/services/automation/index.html", + "bytes": 24037, + "sha256": "eb19a4bb909343a18d5c9bd50efa29c87bf64d572bd7fa44332f04f27a327ea1" + }, + { + "path": "public/services/index.html", + "bytes": 14463, + "sha256": "5394bf16adeb0956cfccda6cc0eebb0191d7e5bee019eaf60cae3e62331aaa07" + }, + { + "path": "public/services/monitoring-security/index.html", + "bytes": 24309, + "sha256": "5dd49adb752f620fb8a2a6fa4794e0241a4a5fa3d7501608c75660034a3cfeb8" + }, + { + "path": "public/services/networks-vpn/index.html", + "bytes": 23743, + "sha256": "0f819963e0079909924c86d4b1f91c7762dc873d5a8f949959e925eb41cb8283" + }, + { + "path": "public/services/remote-desktop/index.html", + "bytes": 24471, + "sha256": "c1a5ab392107aedeec87d4d5c0a35df6275c4894f0e624656a6b4ab0f93c7b0e" + }, + { + "path": "public/services/servers-hosting/index.html", + "bytes": 24375, + "sha256": "7c607febeb25d06b95e340972733eea5cf64f60629e93be1641a5d745162f747" + }, + { + "path": "public/services/video-surveillance/index.html", + "bytes": 24856, + "sha256": "455647dbcb470d96799f66d70f829c749fc85a2db7d4577037a9d2611feb6c86" + }, + { + "path": "public/sitemap.xml", + "bytes": 1142, + "sha256": "fb915319f2248c6b062bbd08b7adeabeabb9f55a4e7a574769bc560aa9f02484" + } + ], + "raw_matches_in_artwork": { + "imagegen-raw/exec-02d51137-9275-4107-aab0-b3aec51a1dad.png": [ + "artwork/video-surveillance.png" + ], + "imagegen-raw/exec-1b28dbd9-1b57-45e2-b54f-c383d56d6060.png": [ + "artwork/photos-selected/horeca.png" + ], + "imagegen-raw/exec-1e275585-1588-432a-bc1e-fd15c7b85927.png": [ + "artwork/photos/video-surveillance.png" + ], + "imagegen-raw/exec-1ee5178f-425c-418b-a035-f0ee471c9785.png": [ + "artwork/photos-selected/it-subscription.png", + "artwork/photos/it-subscription.png" + ], + "imagegen-raw/exec-39369184-d328-4ad5-9f41-eddfeb94508f.png": [ + "artwork/photos-selected/remote-desktop.png" + ], + "imagegen-raw/exec-4b3155ff-9827-4ae2-a0ec-5a75d8e53a58.png": [ + "artwork/photos-selected/servers-hosting.png" + ], + "imagegen-raw/exec-5f0f5101-6c0b-448b-b0a1-71ba1a0824d1.png": [ + "artwork/photos-selected/rapid-response.png", + "artwork/photos/rapid-response.png" + ], + "imagegen-raw/exec-61eacaed-d2f3-4955-9727-0050b3833f5c.png": [ + "artwork/rapid-response.png" + ], + "imagegen-raw/exec-62f4909d-76c8-4a92-b8de-b8a52886fda4.png": [ + "artwork/automation.png" + ], + "imagegen-raw/exec-6b233f08-5a14-47bc-a0ff-f5764ee81358.png": [ + "artwork/construction.png" + ], + "imagegen-raw/exec-6ebb0e96-dbdb-42fc-b961-deac1bcc47e4.png": [ + "artwork/monitoring-security.png" + ], + "imagegen-raw/exec-77c5b007-4c9a-4c06-a2ba-998165ba31af.png": [ + "artwork/photos-selected/agriculture.png", + "artwork/photos/agriculture.png" + ], + "imagegen-raw/exec-8a0cd1c3-cee8-4730-94da-efe1284423e3.png": [ + "artwork/photos/remote-desktop.png" + ], + "imagegen-raw/exec-8f67ef1d-5fb4-4fd6-9173-be51861b4f49.png": [ + "artwork/photos-selected/construction.png", + "artwork/photos/construction.png" + ], + "imagegen-raw/exec-93d89369-e112-40c8-b145-0bb9a6aebd5b.png": [ + "artwork/servers-hosting.png" + ], + "imagegen-raw/exec-9c6feef1-82fd-4c82-841e-7dfdd1eda43d.png": [ + "artwork/photos-selected/automation.png" + ], + "imagegen-raw/exec-9eae21ab-8e29-4bde-a7a0-16ff60198e85.png": [ + "artwork/photos-selected/remote-sites.png", + "artwork/photos/remote-sites.png" + ], + "imagegen-raw/exec-a4670691-b05c-4508-90d6-be9b0e364550.png": [ + "artwork/photos/horeca.png" + ], + "imagegen-raw/exec-a7186d04-ce0a-4b37-b693-a6e11a8d446e.png": [ + "artwork/remote-sites.png" + ], + "imagegen-raw/exec-a831e3ef-b8b0-438b-b3b4-41cd1c986465.png": [ + "artwork/photos-selected/networks-vpn.png" + ], + "imagegen-raw/exec-afb4de23-8a8f-4bb9-b7c9-b4340eac4634.png": [ + "artwork/photos/servers-hosting.png" + ], + "imagegen-raw/exec-b37ae9f3-1290-47d8-8422-535881431064.png": [ + "artwork/photos-selected/video-surveillance.png" + ], + "imagegen-raw/exec-b6ffe55d-e553-40d2-a091-9def97ab9945.png": [ + "artwork/remote-desktop.png" + ], + "imagegen-raw/exec-cd106f52-885c-43b2-885a-03f9c7e93dae.png": [ + "artwork/networks-vpn.png" + ], + "imagegen-raw/exec-d3faf4a3-0cc1-4829-801c-ce9ddfc20067.png": [ + "artwork/it-subscription.png" + ], + "imagegen-raw/exec-e0a9d62c-84c6-47b5-98e6-7ce83011c1f9.png": [ + "artwork/photos-selected/monitoring-security.png" + ], + "imagegen-raw/exec-e6458072-925a-4eb2-840a-1c4977c979b1.png": [ + "artwork/photos/automation.png" + ], + "imagegen-raw/exec-e9c22a40-e210-4f73-becc-3fc54312fe35.png": [ + "artwork/photos/networks-vpn.png" + ], + "imagegen-raw/exec-f42c374b-ac2e-460f-9c2e-cbe43405f8a9.png": [ + "artwork/photos/monitoring-security.png" + ], + "imagegen-raw/exec-f7a9557c-4473-4560-82d8-3fdba4a25eba.png": [ + "artwork/agriculture.png" + ], + "imagegen-raw/exec-fbbb25e2-d453-4003-b933-13105e209940.png": [ + "artwork/horeca.png" + ], + "imagegen-raw/photo-edit-agriculture.png": [ + "artwork/photos-localized/agriculture.png" + ], + "imagegen-raw/photo-edit-construction.png": [ + "artwork/photos-localized/construction.png" + ], + "imagegen-raw/photo-edit-horeca.png": [ + "artwork/photos-localized/horeca.png" + ], + "imagegen-raw/photo-edit-video-surveillance.png": [ + "artwork/photos-localized/video-surveillance.png" + ] + } +} diff --git a/assets/photo-agriculture-ru-1536.webp b/assets/photo-agriculture-ru-1536.webp new file mode 100644 index 0000000..562ca31 Binary files /dev/null and b/assets/photo-agriculture-ru-1536.webp differ diff --git a/assets/photo-agriculture-ru-480.webp b/assets/photo-agriculture-ru-480.webp new file mode 100644 index 0000000..9417903 Binary files /dev/null and b/assets/photo-agriculture-ru-480.webp differ diff --git a/assets/photo-agriculture-ru-960.webp b/assets/photo-agriculture-ru-960.webp new file mode 100644 index 0000000..f42bfa5 Binary files /dev/null and b/assets/photo-agriculture-ru-960.webp differ diff --git a/assets/photo-construction-ru-1536.webp b/assets/photo-construction-ru-1536.webp new file mode 100644 index 0000000..f726d9d Binary files /dev/null and b/assets/photo-construction-ru-1536.webp differ diff --git a/assets/photo-construction-ru-480.webp b/assets/photo-construction-ru-480.webp new file mode 100644 index 0000000..54cc46a Binary files /dev/null and b/assets/photo-construction-ru-480.webp differ diff --git a/assets/photo-construction-ru-960.webp b/assets/photo-construction-ru-960.webp new file mode 100644 index 0000000..04d509a Binary files /dev/null and b/assets/photo-construction-ru-960.webp differ diff --git a/assets/photo-horeca-ru-1536.webp b/assets/photo-horeca-ru-1536.webp new file mode 100644 index 0000000..990810e Binary files /dev/null and b/assets/photo-horeca-ru-1536.webp differ diff --git a/assets/photo-horeca-ru-480.webp b/assets/photo-horeca-ru-480.webp new file mode 100644 index 0000000..4fcb319 Binary files /dev/null and b/assets/photo-horeca-ru-480.webp differ diff --git a/assets/photo-horeca-ru-960.webp b/assets/photo-horeca-ru-960.webp new file mode 100644 index 0000000..5fab956 Binary files /dev/null and b/assets/photo-horeca-ru-960.webp differ diff --git a/assets/photo-video-surveillance-ru-1536.webp b/assets/photo-video-surveillance-ru-1536.webp new file mode 100644 index 0000000..3d036b0 Binary files /dev/null and b/assets/photo-video-surveillance-ru-1536.webp differ diff --git a/assets/photo-video-surveillance-ru-480.webp b/assets/photo-video-surveillance-ru-480.webp new file mode 100644 index 0000000..d650b7f Binary files /dev/null and b/assets/photo-video-surveillance-ru-480.webp differ diff --git a/assets/photo-video-surveillance-ru-960.webp b/assets/photo-video-surveillance-ru-960.webp new file mode 100644 index 0000000..dbf9a16 Binary files /dev/null and b/assets/photo-video-surveillance-ru-960.webp differ diff --git a/build.py b/build.py index 6c518f7..601372e 100644 --- a/build.py +++ b/build.py @@ -11,6 +11,7 @@ PAGES=json.loads((ROOT/'content/pages.json').read_text(encoding='utf-8')) BY_ID={p['slug']:p for p in PAGES} PRIVACY=json.loads((ROOT/'content/privacy-notes.json').read_text(encoding='utf-8')) PHOTO_ALT=json.loads((ROOT/'content/photo-alt.json').read_text(encoding='utf-8')) +PHOTO_ASSET={item['slug']:item.get('asset','photo-'+item['slug']) for item in json.loads((ROOT/'content/photo-manifest.json').read_text(encoding='utf-8'))} FLOWS=json.loads((ROOT/'content/flow-scenes.json').read_text(encoding='utf-8')) IMAGE_MOTION=json.loads((ROOT/'content/image-motion.json').read_text(encoding='utf-8')) CARD_COPY=json.loads((ROOT/'content/card-copy.json').read_text(encoding='utf-8')) @@ -44,7 +45,7 @@ def image(p,lazy=True,small=False): return f'{esc(p[' def photo_image(p): slug=p['slug'] - return image(p,lazy=False).replace(f'/{slug}-',f'/photo-{slug}-').replace(esc(p['alt']),esc(PHOTO_ALT[slug])).replace('(max-width: 1248px) 100vw, 1200px','(max-width: 600px) calc(100vw - 32px), (max-width: 1000px) calc(100vw - 48px), 520px') + return image(p,lazy=False).replace(f'/{slug}-',f'/{PHOTO_ASSET[slug]}-').replace(esc(p['alt']),esc(PHOTO_ALT[slug])).replace('(max-width: 1248px) 100vw, 1200px','(max-width: 600px) calc(100vw - 32px), (max-width: 1000px) calc(100vw - 48px), 520px') def motion_image(p,small=True): scene=IMAGE_MOTION[p['slug']] paths=[] @@ -136,12 +137,12 @@ def build(): for width in [480,960,1536]: img=ROOT/'assets'/f'{p["slug"]}-{width}.webp' if img.exists():shutil.copy2(img,dest/img.name) - photo=ROOT/'assets'/f'photo-{p["slug"]}-{width}.webp' + photo=ROOT/'assets'/f'{PHOTO_ASSET[p["slug"]]}-{width}.webp' if not photo.exists():raise RuntimeError('Missing warm photograph: '+str(photo)) shutil.copy2(photo,dest/photo.name) page=article(p) page=page.replace(image(p,lazy=False),photo_image(p),1) - page=page.replace(f'/assets/editorial/{p["slug"]}-1536.webp',f'/assets/editorial/photo-{p["slug"]}-1536.webp') + page=page.replace(f'/assets/editorial/{p["slug"]}-1536.webp',f'/assets/editorial/{PHOTO_ASSET[p["slug"]]}-1536.webp') page=page.replace(' · Тематическая AI-иллюстрация',' · Изображение создано ИИ, без данных и фотографий клиентов',1) page=page.replace('
','
',1) page=page.replace('
','
',1) diff --git a/content/photo-edit-prompts.json b/content/photo-edit-prompts.json new file mode 100644 index 0000000..6eddb1b --- /dev/null +++ b/content/photo-edit-prompts.json @@ -0,0 +1,34 @@ +{ + "mode": "built-in image_gen, text-localization edit", + "rule": "If any text is visible in a site image, use meaningful, correctly spelled Russian Cyrillic. Verify every word at full resolution; avoid invented client details, Latin letters and gibberish.", + "edits": { + "video-surveillance": { + "source": "artwork/photos-selected/video-surveillance.png", + "result": "artwork/photos-localized/video-surveillance.png", + "exact_text": ["ГОСТЕВОЙ ДОМ", "СЕРВАКИ"], + "placement": "Wooden guesthouse sign and technician's navy polo", + "prompt": "Preserve the people, camera, stone courtyard, lighting and composition. Add ГОСТЕВОЙ ДОМ in readable Cyrillic to the blank wooden sign, and a small СЕРВАКИ embroidered label to the technician's polo. No other text or changes." + }, + "horeca": { + "source": "artwork/photos-selected/horeca.png", + "result": "artwork/photos-localized/horeca.png", + "exact_text": ["КАФЕ", "СЕРВАКИ"], + "placement": "Chalkboard and technician's dark jacket", + "prompt": "Preserve the people, access point, tablet, wood interior and composition. Add КАФЕ in readable Cyrillic on the blank chalkboard and a small СЕРВАКИ embroidered label on the technician's jacket. No other text or changes." + }, + "construction": { + "source": "artwork/photos-selected/construction.png", + "result": "artwork/photos-localized/construction.png", + "exact_text": ["СЕРВАКИ"], + "placement": "Technical specialist's black jacket", + "prompt": "Preserve both people, camera, plans, safety gear, building, lighting and composition. Add one small correctly spelled Cyrillic СЕРВАКИ label on the technical specialist's black jacket. No other text or changes." + }, + "agriculture": { + "source": "artwork/photos-selected/agriculture.png", + "result": "artwork/photos-localized/agriculture.png", + "exact_text": ["СЕРВАКИ"], + "placement": "Technical specialist's dark jacket", + "prompt": "Preserve the farmers, specialist, sensor, laptop, farm landscape, lighting and composition. Add one small correctly spelled Cyrillic СЕРВАКИ label on the technical specialist's dark jacket. No other text or changes." + } + } +} diff --git a/content/photo-manifest.json b/content/photo-manifest.json index fe55165..4ad73b6 100644 --- a/content/photo-manifest.json +++ b/content/photo-manifest.json @@ -23,9 +23,10 @@ "slug": "monitoring-security", "path": "artwork/photos-selected/monitoring-security.png" }, - { - "slug": "video-surveillance", - "path": "artwork/photos-selected/video-surveillance.png" + { + "slug": "video-surveillance", + "path": "artwork/photos-localized/video-surveillance.png", + "asset": "photo-video-surveillance-ru" }, { "slug": "servers-hosting", @@ -35,16 +36,19 @@ "slug": "automation", "path": "artwork/photos-selected/automation.png" }, - { - "slug": "horeca", - "path": "artwork/photos-selected/horeca.png" + { + "slug": "horeca", + "path": "artwork/photos-localized/horeca.png", + "asset": "photo-horeca-ru" }, - { - "slug": "agriculture", - "path": "artwork/photos-selected/agriculture.png" + { + "slug": "agriculture", + "path": "artwork/photos-localized/agriculture.png", + "asset": "photo-agriculture-ru" }, - { - "slug": "construction", - "path": "artwork/photos-selected/construction.png" + { + "slug": "construction", + "path": "artwork/photos-localized/construction.png", + "asset": "photo-construction-ru" } ] diff --git a/deploy_beget.py b/deploy_beget.py index 0522d1f..4ce086c 100644 --- a/deploy_beget.py +++ b/deploy_beget.py @@ -252,6 +252,61 @@ def update_motion(): sftp.close(); ssh.close() +def update_localized_photos(): + """Publish four Russian-lettered photos under new cache-safe asset names.""" + previous = ROOT.parent / 'site-servaki-online-git' / 'public' + if not previous.is_dir(): + raise RuntimeError('Previous Gitea release is required for the baseline check') + old = {p.relative_to(previous).as_posix(): digest(p.read_bytes()) + for p in previous.rglob('*') if p.is_file()} + new = manifest() + slugs = ('video-surveillance', 'horeca', 'agriculture', 'construction') + pages = {'services/video-surveillance/index.html', + *(f'industries/{slug}/index.html' for slug in slugs if slug != 'video-surveillance')} + assets = {f'assets/editorial/photo-{slug}-ru-{width}.webp' + for slug in slugs for width in (480, 960, 1536)} + changed = {rel for rel in new if new[rel] != old.get(rel)} + if set(old) - set(new) or changed != pages | assets: + raise RuntimeError('Unexpected Russian-photo release scope: ' + repr(sorted(changed ^ (pages | assets)))) + local_backup = ROOT / 'release-backups' / '2026-09-28-before-russian-photos' + remote_backup = SITE + '/backup-2026-09-28-before-russian-photos' + ssh, sftp = connect() + try: + for rel, expected in old.items(): + target = WEBROOT + '/' + rel + if not exists(sftp, target) or digest(remote_bytes(sftp, target)) != expected: + raise RuntimeError('Published baseline changed; stopped before writing: ' + rel) + for rel in assets: + if exists(sftp, WEBROOT + '/' + rel): + raise RuntimeError('New localized asset already exists: ' + rel) + mkdirs(sftp, remote_backup) + for rel in sorted(pages): + data = remote_bytes(sftp, WEBROOT + '/' + rel) + destination = local_backup / rel + destination.parent.mkdir(parents=True, exist_ok=True) + if destination.exists() and destination.read_bytes() != data: + raise RuntimeError('Local backup conflict: ' + rel) + destination.write_bytes(data) + remote_copy = remote_backup + '/' + rel + if exists(sftp, remote_copy): + if digest(remote_bytes(sftp, remote_copy)) != old[rel]: + raise RuntimeError('Remote backup conflict: ' + rel) + else: + put_atomic(sftp, destination, remote_copy) + for rel in sorted(assets): + put_atomic(sftp, ROOT / 'public' / rel, WEBROOT + '/' + rel) + for rel in sorted(pages): + put_atomic(sftp, ROOT / 'public' / rel, WEBROOT + '/' + rel, + replace=True, backup_dir=remote_backup) + for rel in changed: + if digest(remote_bytes(sftp, WEBROOT + '/' + rel)) != new[rel]: + raise RuntimeError('Published localized photo failed checksum: ' + rel) + print('Published Russian-lettered photos; changed files:', len(changed), + 'verified previous files:', len(old), 'backup:', remote_backup) + finally: + sftp.close(); ssh.close() + + def reprice(): """Replace only the published homepage after verifying the six price tokens.""" before = json.loads((BACKUP / 'deployed.json').read_text(encoding='utf-8')) @@ -304,4 +359,5 @@ def reprice(): if __name__ == '__main__': {'audit': audit, 'deploy': deploy, 'verify': verify, - 'reprice': reprice, 'update-motion': update_motion}[sys.argv[1]]() + 'reprice': reprice, 'update-motion': update_motion, + 'update-localized-photos': update_localized_photos}[sys.argv[1]]() diff --git a/prepare_photos.py b/prepare_photos.py index 7214bbe..c56aad5 100644 --- a/prepare_photos.py +++ b/prepare_photos.py @@ -1,19 +1,17 @@ """Preserve generated editorial photographs and export responsive WebP versions.""" from pathlib import Path from PIL import Image, ImageDraw, ImageOps -import json, shutil +import json ROOT=Path(__file__).resolve().parent manifest=json.loads((ROOT/'content/photo-manifest.json').read_text(encoding='utf-8')) originals=ROOT/'artwork/photos-selected'; originals.mkdir(parents=True,exist_ok=True) tiles=[] for item in manifest: - slug=item['slug']; source=ROOT/item['path'] - dest=originals/(slug+'.png') - if source.resolve()!=dest.resolve():shutil.copy2(source,dest) + slug=item['slug']; source=ROOT/item['path']; asset=item.get('asset','photo-'+slug) picture=Image.open(source).convert('RGB') picture=ImageOps.fit(picture,(1536,1024),method=Image.Resampling.LANCZOS,centering=(.5,.5)) for width in (480,960,1536): - picture.resize((width,round(width*2/3)),Image.Resampling.LANCZOS).save(ROOT/'assets'/f'photo-{slug}-{width}.webp',quality=83,method=6) + picture.resize((width,round(width*2/3)),Image.Resampling.LANCZOS).save(ROOT/'assets'/f'{asset}-{width}.webp',quality=83,method=6) tile=Image.new('RGB',(384,280),'#05070f') tile.paste(picture.resize((384,256)),(0,0)) ImageDraw.Draw(tile).text((12,263),slug,fill='#67e8f9') diff --git a/public/assets/editorial/photo-agriculture-ru-1536.webp b/public/assets/editorial/photo-agriculture-ru-1536.webp new file mode 100644 index 0000000..562ca31 Binary files /dev/null and b/public/assets/editorial/photo-agriculture-ru-1536.webp differ diff --git a/public/assets/editorial/photo-agriculture-ru-480.webp b/public/assets/editorial/photo-agriculture-ru-480.webp new file mode 100644 index 0000000..9417903 Binary files /dev/null and b/public/assets/editorial/photo-agriculture-ru-480.webp differ diff --git a/public/assets/editorial/photo-agriculture-ru-960.webp b/public/assets/editorial/photo-agriculture-ru-960.webp new file mode 100644 index 0000000..f42bfa5 Binary files /dev/null and b/public/assets/editorial/photo-agriculture-ru-960.webp differ diff --git a/public/assets/editorial/photo-construction-ru-1536.webp b/public/assets/editorial/photo-construction-ru-1536.webp new file mode 100644 index 0000000..f726d9d Binary files /dev/null and b/public/assets/editorial/photo-construction-ru-1536.webp differ diff --git a/public/assets/editorial/photo-construction-ru-480.webp b/public/assets/editorial/photo-construction-ru-480.webp new file mode 100644 index 0000000..54cc46a Binary files /dev/null and b/public/assets/editorial/photo-construction-ru-480.webp differ diff --git a/public/assets/editorial/photo-construction-ru-960.webp b/public/assets/editorial/photo-construction-ru-960.webp new file mode 100644 index 0000000..04d509a Binary files /dev/null and b/public/assets/editorial/photo-construction-ru-960.webp differ diff --git a/public/assets/editorial/photo-horeca-ru-1536.webp b/public/assets/editorial/photo-horeca-ru-1536.webp new file mode 100644 index 0000000..990810e Binary files /dev/null and b/public/assets/editorial/photo-horeca-ru-1536.webp differ diff --git a/public/assets/editorial/photo-horeca-ru-480.webp b/public/assets/editorial/photo-horeca-ru-480.webp new file mode 100644 index 0000000..4fcb319 Binary files /dev/null and b/public/assets/editorial/photo-horeca-ru-480.webp differ diff --git a/public/assets/editorial/photo-horeca-ru-960.webp b/public/assets/editorial/photo-horeca-ru-960.webp new file mode 100644 index 0000000..5fab956 Binary files /dev/null and b/public/assets/editorial/photo-horeca-ru-960.webp differ diff --git a/public/assets/editorial/photo-video-surveillance-ru-1536.webp b/public/assets/editorial/photo-video-surveillance-ru-1536.webp new file mode 100644 index 0000000..3d036b0 Binary files /dev/null and b/public/assets/editorial/photo-video-surveillance-ru-1536.webp differ diff --git a/public/assets/editorial/photo-video-surveillance-ru-480.webp b/public/assets/editorial/photo-video-surveillance-ru-480.webp new file mode 100644 index 0000000..d650b7f Binary files /dev/null and b/public/assets/editorial/photo-video-surveillance-ru-480.webp differ diff --git a/public/assets/editorial/photo-video-surveillance-ru-960.webp b/public/assets/editorial/photo-video-surveillance-ru-960.webp new file mode 100644 index 0000000..dbf9a16 Binary files /dev/null and b/public/assets/editorial/photo-video-surveillance-ru-960.webp differ diff --git a/public/industries/agriculture/index.html b/public/industries/agriculture/index.html index 76e496d..5356f5c 100644 --- a/public/industries/agriculture/index.html +++ b/public/industries/agriculture/index.html @@ -1 +1 @@ -IT для ферм и агробизнеса: связь, весовые и мониторинг | servaki.online
Отрасли / Объекты далеко. Информация рядом.

IT для ферм и агробизнеса: связь, весовые и мониторинг

На ферме IT выходит за стены офиса: весовая, склад, ремонтная зона, камеры и датчики могут находиться на разных площадках. Помогаем связать их и видеть состояние важных систем.

Команда servaki.online · · 3 мин чтения

Семья фермеров и специалист обсуждают датчики и работу хозяйства
Объекты далеко. Информация рядом. · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДПрактика весовых и связи между площадками
02 / НАШ ПОДХОДСочетание сетей, камер и контроллеров
03 / НАШ ПОДХОДДиагностика с учётом питания и выездов

Связь между площадками

Проверяем доступные каналы, расстояния и зависимость оборудования от питания. Для офисной части, весовой и камер могут понадобиться разные требования к трафику. Подбираем схему удалённого доступа и резервирования с учётом существующего оборудования. Радиолинию и мобильный интернет оцениваем по измерениям на месте.

ПРИНЦИП РАБОТЫПоказания с удалённого объектаУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Датчик01
Связь02
Ответственный03

Весовая и рабочие данные

Разделяем доступность сети, работу компьютера и поведение специализированной весовой программы. Уточняем интерфейсы оборудования и ответственность поставщика. Настраиваем согласованный доступ к рабочему месту, контроль связи и резервирование данных, если это входит в задачу. До интеграции с учётной системой проверяем формат обмена.

Опыт на распределённых хозяйственных объектах

В нашей практике есть диагностика связи весовой с удалённой ремонтной зоной и работа с видеонаблюдением на удалённых площадках. Наблюдение за доступностью оборудования и временем его работы позволяет точнее искать причину: перезапуск, пропадание питания или обрыв участка сети. Такой подход особенно полезен там, где каждый выезд занимает время.

Показания и уведомления

Работаем с контроллерами Wiren Board и передачей данных по MQTT. Можно организовать наблюдение за совместимыми измерителями, питанием и состоянием оборудования. Для каждого сигнала согласуем порог, период проверки и получателя. Управление исполнительными устройствами рассматриваем отдельно от мониторинга, с учётом локальных защит и условий эксплуатации.

Результат для ответственного

Стремимся сделать состояние площадки понятным без изучения десятков интерфейсов: какой объект на связи, откуда давно не поступали данные, что проверить первым. Документируем состав системы и действия при типовых отказах. Автоматизация внедряется поэтапно, начиная с самого полезного и проверяемого сценария.

Вопросы и ответы

Можно ли получать показания датчиков на телефон?

Да, если датчики и контроллер поддерживают доступный интерфейс. Согласуем состав данных, периодичность и способ уведомлений.

Подключите ли существующую весовую к учёту?

Сначала проверим оборудование, программу и доступный формат обмена. Интеграция зависит от совместимости и документации поставщика.

Что делать, если на площадке нестабильный интернет?

Обследуем связь и питание, рассмотрим резерв. Критичные локальные функции должны сохраняться без зависимости от постоянного внешнего соединения.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file +IT для ферм и агробизнеса: связь, весовые и мониторинг | servaki.online
Отрасли / Объекты далеко. Информация рядом.

IT для ферм и агробизнеса: связь, весовые и мониторинг

На ферме IT выходит за стены офиса: весовая, склад, ремонтная зона, камеры и датчики могут находиться на разных площадках. Помогаем связать их и видеть состояние важных систем.

Команда servaki.online · · 3 мин чтения

Семья фермеров и специалист обсуждают датчики и работу хозяйства
Объекты далеко. Информация рядом. · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДПрактика весовых и связи между площадками
02 / НАШ ПОДХОДСочетание сетей, камер и контроллеров
03 / НАШ ПОДХОДДиагностика с учётом питания и выездов

Связь между площадками

Проверяем доступные каналы, расстояния и зависимость оборудования от питания. Для офисной части, весовой и камер могут понадобиться разные требования к трафику. Подбираем схему удалённого доступа и резервирования с учётом существующего оборудования. Радиолинию и мобильный интернет оцениваем по измерениям на месте.

ПРИНЦИП РАБОТЫПоказания с удалённого объектаУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Датчик01
Связь02
Ответственный03

Весовая и рабочие данные

Разделяем доступность сети, работу компьютера и поведение специализированной весовой программы. Уточняем интерфейсы оборудования и ответственность поставщика. Настраиваем согласованный доступ к рабочему месту, контроль связи и резервирование данных, если это входит в задачу. До интеграции с учётной системой проверяем формат обмена.

Опыт на распределённых хозяйственных объектах

В нашей практике есть диагностика связи весовой с удалённой ремонтной зоной и работа с видеонаблюдением на удалённых площадках. Наблюдение за доступностью оборудования и временем его работы позволяет точнее искать причину: перезапуск, пропадание питания или обрыв участка сети. Такой подход особенно полезен там, где каждый выезд занимает время.

Показания и уведомления

Работаем с контроллерами Wiren Board и передачей данных по MQTT. Можно организовать наблюдение за совместимыми измерителями, питанием и состоянием оборудования. Для каждого сигнала согласуем порог, период проверки и получателя. Управление исполнительными устройствами рассматриваем отдельно от мониторинга, с учётом локальных защит и условий эксплуатации.

Результат для ответственного

Стремимся сделать состояние площадки понятным без изучения десятков интерфейсов: какой объект на связи, откуда давно не поступали данные, что проверить первым. Документируем состав системы и действия при типовых отказах. Автоматизация внедряется поэтапно, начиная с самого полезного и проверяемого сценария.

Вопросы и ответы

Можно ли получать показания датчиков на телефон?

Да, если датчики и контроллер поддерживают доступный интерфейс. Согласуем состав данных, периодичность и способ уведомлений.

Подключите ли существующую весовую к учёту?

Сначала проверим оборудование, программу и доступный формат обмена. Интеграция зависит от совместимости и документации поставщика.

Что делать, если на площадке нестабильный интернет?

Обследуем связь и питание, рассмотрим резерв. Критичные локальные функции должны сохраняться без зависимости от постоянного внешнего соединения.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file diff --git a/public/industries/construction/index.html b/public/industries/construction/index.html index 3984b85..c04b12e 100644 --- a/public/industries/construction/index.html +++ b/public/industries/construction/index.html @@ -1 +1 @@ -IT для стройплощадок: временные сети и видеонаблюдение | servaki.online
Отрасли / Инфраструктура движется вместе с объектом

IT для стройплощадок: временные сети и видеонаблюдение

Стройплощадка меняется по мере работ. Планируем связь и видеонаблюдение так, чтобы оборудование можно было обслуживать, переносить и расширять без потери понимания системы.

Команда servaki.online · · 3 мин чтения

Руководитель стройплощадки и специалист обсуждают оборудование в рабочем офисе
Инфраструктура движется вместе с объектом · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДОпыт работы с планами камер и трасс
02 / НАШ ПОДХОДУчёт временного характера инфраструктуры
03 / НАШ ПОДХОДДокументирование изменений и передачи объекта

Интернет и рабочие места на объекте

Организуем сеть для штаба строительства, сотрудников и согласованных рабочих систем. Выбор подключения зависит от доступных операторов, расположения площадки и срока эксплуатации. Проверяем питание, размещение оборудования и защищённый доступ к офисным ресурсам. Для временного решения также нужны документация и ответственный за обслуживание.

ПРИНЦИП РАБОТЫСистема на строительной площадкеУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Камера01
Сеть объекта02
Штаб03

Камеры под этап строительства

Определяем нужные зоны: въезд, склад, периметр или ход работ. При изменении застройки прежний ракурс может стать бесполезным, поэтому предусматриваем пересмотр размещения. Учитываем кабельные трассы, питание, условия среды и сохранение архива. Удалённый просмотр проверяем отдельно от локальной записи.

Практика работы со схемами

В опыте команды есть работа с планами камер, кабельных трасс и систем доступа для строительного объекта. Наглядная модель помогает обсуждать обзор и расположение устройств, но не заменяет проверенную исполнительную документацию. Если исходные привязки отсутствуют, фиксируем это явно и уточняем их до монтажного решения.

Изменения без потери управляемости

Перенос бытовок, смена подрядчиков и добавление оборудования меняют сеть. После согласованных работ актуализируем схему и резервные конфигурации. Проверяем, что новые подключения не нарушили существующие камеры и рабочие места. Временные доступы выдаём под задачу и пересматриваем по завершении работ.

Передача и дальнейшее сопровождение

Составляем перечень устройств, назначение соединений и порядок восстановления после отключения питания. При передаче объекта важно передать не только оборудование, но и актуальные настройки, права и документацию. Заранее согласуем, что остаётся в постоянной эксплуатации, а что демонтируется или переносится на следующую площадку.

Вопросы и ответы

Можно ли начать с мобильного интернета?

Да, если покрытие и нагрузка позволяют. Качество и возможность резерва оцениваем на площадке.

Можно ли переносить камеры по мере строительства?

Да, но после переноса нужно заново проверить обзор, питание, соединение и запись. План размещения стоит актуализировать.

Заменяет ли 3D-схема монтажный проект?

Нет. Наглядная схема помогает согласованию; точные привязки и монтажные решения требуют проверенных исходных данных и документации.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file +IT для стройплощадок: временные сети и видеонаблюдение | servaki.online
Отрасли / Инфраструктура движется вместе с объектом

IT для стройплощадок: временные сети и видеонаблюдение

Стройплощадка меняется по мере работ. Планируем связь и видеонаблюдение так, чтобы оборудование можно было обслуживать, переносить и расширять без потери понимания системы.

Команда servaki.online · · 3 мин чтения

Руководитель стройплощадки и специалист обсуждают оборудование в рабочем офисе
Инфраструктура движется вместе с объектом · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДОпыт работы с планами камер и трасс
02 / НАШ ПОДХОДУчёт временного характера инфраструктуры
03 / НАШ ПОДХОДДокументирование изменений и передачи объекта

Интернет и рабочие места на объекте

Организуем сеть для штаба строительства, сотрудников и согласованных рабочих систем. Выбор подключения зависит от доступных операторов, расположения площадки и срока эксплуатации. Проверяем питание, размещение оборудования и защищённый доступ к офисным ресурсам. Для временного решения также нужны документация и ответственный за обслуживание.

ПРИНЦИП РАБОТЫСистема на строительной площадкеУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Камера01
Сеть объекта02
Штаб03

Камеры под этап строительства

Определяем нужные зоны: въезд, склад, периметр или ход работ. При изменении застройки прежний ракурс может стать бесполезным, поэтому предусматриваем пересмотр размещения. Учитываем кабельные трассы, питание, условия среды и сохранение архива. Удалённый просмотр проверяем отдельно от локальной записи.

Практика работы со схемами

В опыте команды есть работа с планами камер, кабельных трасс и систем доступа для строительного объекта. Наглядная модель помогает обсуждать обзор и расположение устройств, но не заменяет проверенную исполнительную документацию. Если исходные привязки отсутствуют, фиксируем это явно и уточняем их до монтажного решения.

Изменения без потери управляемости

Перенос бытовок, смена подрядчиков и добавление оборудования меняют сеть. После согласованных работ актуализируем схему и резервные конфигурации. Проверяем, что новые подключения не нарушили существующие камеры и рабочие места. Временные доступы выдаём под задачу и пересматриваем по завершении работ.

Передача и дальнейшее сопровождение

Составляем перечень устройств, назначение соединений и порядок восстановления после отключения питания. При передаче объекта важно передать не только оборудование, но и актуальные настройки, права и документацию. Заранее согласуем, что остаётся в постоянной эксплуатации, а что демонтируется или переносится на следующую площадку.

Вопросы и ответы

Можно ли начать с мобильного интернета?

Да, если покрытие и нагрузка позволяют. Качество и возможность резерва оцениваем на площадке.

Можно ли переносить камеры по мере строительства?

Да, но после переноса нужно заново проверить обзор, питание, соединение и запись. План размещения стоит актуализировать.

Заменяет ли 3D-схема монтажный проект?

Нет. Наглядная схема помогает согласованию; точные привязки и монтажные решения требуют проверенных исходных данных и документации.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file diff --git a/public/industries/horeca/index.html b/public/industries/horeca/index.html index 1569e70..265c301 100644 --- a/public/industries/horeca/index.html +++ b/public/industries/horeca/index.html @@ -1 +1 @@ -IT-поддержка гостиниц, кафе и ресторанов на КМВ | servaki.online
Отрасли / Технологии поддерживают сервис

IT-поддержка гостиниц, кафе и ресторанов на КМВ

Гость должен пользоваться связью, а сотрудники — спокойно работать с заказами и бронированиями. Собираем IT-инфраструктуру заведения вокруг этих повседневных задач.

Команда servaki.online · · 3 мин чтения

Владелец семейного отеля и инженер проверяют связь в уютном ресторане
Технологии поддерживают сервис · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДРазделение гостевого и рабочего доступа
02 / НАШ ПОДХОДДиагностика общих причин сбоев
03 / НАШ ПОДХОДРаботы с учётом режима заведения

Разделяем гостевую и служебную сеть

Посетителям нужен удобный Wi-Fi, персоналу — стабильный доступ к рабочим системам. Предусматриваем разделение сегментов и ограничения доступа между ними. При обследовании учитываем планировку, перекрытия и места высокой нагрузки. Размещение точек доступа выбираем по условиям объекта, а качество связи проверяем в нужных зонах.

ПРИНЦИП РАБОТЫСвязь в гостевом доме или кафеУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Гостевая сеть01
Разделение02
Рабочий сервис03

Касса, бронирование и рабочее место

Проверяем сетевую часть подключения кассовых устройств, принтеров, компьютеров администратора и внешних сервисов. Поддержку самого прикладного ПО и фискального оборудования согласуем с их поставщиками. Это помогает быстро определить, кто решает конкретную проблему, вместо пересылки заявки между несколькими подрядчиками.

Как наш инженерный опыт помогает заведению

Опыт команды в сетях, удалённых объектах, серверных сервисах и видеонаблюдении применим к гостиницам и ресторанам: здесь также важно видеть общие зависимости. Если пропало питание коммутатора, одновременно могут исчезнуть Wi-Fi, камеры и рабочие подключения. Начинаем диагностику с картины целиком, затем проверяем отдельные устройства.

Обновления с учётом гостей и смен

Согласуем работы на время минимальной нагрузки и предупреждаем, какие операции будут недоступны. Перед изменением сохраняем настройки и определяем порядок возврата. Для сезонных объектов полезно проверить оборудование и доступы до открытия, а после перестановок — заново оценить покрытие Wi-Fi и зоны обзора камер.

Что обсуждаем перед подключением

Количество зон и рабочих мест, часы работы, текущих поставщиков ПО, необходимость резерва интернета и удалённого просмотра камер. Интеграции с сервисами доставки или бронирования оцениваем по доступным интерфейсам. По результатам формируем понятный состав поддержки и правила обращения для персонала.

Вопросы и ответы

Можно ли улучшить Wi-Fi без полной замены сети?

Возможно: сначала проверяем размещение точек, настройки, кабели и нагрузку. Замена нужна только там, где оборудование или схема ограничивают результат.

Поддерживаете ли кассовое ПО?

Согласуем перечень систем и границы работ. Настройку сети отделяем от задач, требующих участия поставщика кассового или фискального оборудования.

Работаете ли с сезонными базами отдыха?

Такой объект можно включить в сопровождение. Состав подготовки к сезону и условия поддержки согласуются по его оборудованию и режиму работы.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file +IT-поддержка гостиниц, кафе и ресторанов на КМВ | servaki.online
Отрасли / Технологии поддерживают сервис

IT-поддержка гостиниц, кафе и ресторанов на КМВ

Гость должен пользоваться связью, а сотрудники — спокойно работать с заказами и бронированиями. Собираем IT-инфраструктуру заведения вокруг этих повседневных задач.

Команда servaki.online · · 3 мин чтения

Владелец семейного отеля и инженер проверяют связь в уютном ресторане
Технологии поддерживают сервис · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДРазделение гостевого и рабочего доступа
02 / НАШ ПОДХОДДиагностика общих причин сбоев
03 / НАШ ПОДХОДРаботы с учётом режима заведения

Разделяем гостевую и служебную сеть

Посетителям нужен удобный Wi-Fi, персоналу — стабильный доступ к рабочим системам. Предусматриваем разделение сегментов и ограничения доступа между ними. При обследовании учитываем планировку, перекрытия и места высокой нагрузки. Размещение точек доступа выбираем по условиям объекта, а качество связи проверяем в нужных зонах.

ПРИНЦИП РАБОТЫСвязь в гостевом доме или кафеУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Гостевая сеть01
Разделение02
Рабочий сервис03

Касса, бронирование и рабочее место

Проверяем сетевую часть подключения кассовых устройств, принтеров, компьютеров администратора и внешних сервисов. Поддержку самого прикладного ПО и фискального оборудования согласуем с их поставщиками. Это помогает быстро определить, кто решает конкретную проблему, вместо пересылки заявки между несколькими подрядчиками.

Как наш инженерный опыт помогает заведению

Опыт команды в сетях, удалённых объектах, серверных сервисах и видеонаблюдении применим к гостиницам и ресторанам: здесь также важно видеть общие зависимости. Если пропало питание коммутатора, одновременно могут исчезнуть Wi-Fi, камеры и рабочие подключения. Начинаем диагностику с картины целиком, затем проверяем отдельные устройства.

Обновления с учётом гостей и смен

Согласуем работы на время минимальной нагрузки и предупреждаем, какие операции будут недоступны. Перед изменением сохраняем настройки и определяем порядок возврата. Для сезонных объектов полезно проверить оборудование и доступы до открытия, а после перестановок — заново оценить покрытие Wi-Fi и зоны обзора камер.

Что обсуждаем перед подключением

Количество зон и рабочих мест, часы работы, текущих поставщиков ПО, необходимость резерва интернета и удалённого просмотра камер. Интеграции с сервисами доставки или бронирования оцениваем по доступным интерфейсам. По результатам формируем понятный состав поддержки и правила обращения для персонала.

Вопросы и ответы

Можно ли улучшить Wi-Fi без полной замены сети?

Возможно: сначала проверяем размещение точек, настройки, кабели и нагрузку. Замена нужна только там, где оборудование или схема ограничивают результат.

Поддерживаете ли кассовое ПО?

Согласуем перечень систем и границы работ. Настройку сети отделяем от задач, требующих участия поставщика кассового или фискального оборудования.

Работаете ли с сезонными базами отдыха?

Такой объект можно включить в сопровождение. Состав подготовки к сезону и условия поддержки согласуются по его оборудованию и режиму работы.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file diff --git a/public/services/video-surveillance/index.html b/public/services/video-surveillance/index.html index 232b267..6aedf9d 100644 --- a/public/services/video-surveillance/index.html +++ b/public/services/video-surveillance/index.html @@ -1 +1 @@ -Видеонаблюдение для бизнеса: камеры, архив и удалённый доступ | servaki.online
Услуги / Нужный ракурс. Доступная запись.

Видеонаблюдение для бизнеса: камеры, архив и удалённый доступ

Помогаем видеть нужную зону и находить запись нужного события. Рассматриваем видеонаблюдение как единую систему: обзор, освещение, сеть, питание, регистратор и доступ ответственных.

Команда servaki.online · · 3 мин чтения

Инженер и владельцы гостевого дома оценивают обзор наружной камеры
Нужный ракурс. Доступная запись. · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДОпыт с сетевой частью и удалёнными регистраторами
02 / НАШ ПОДХОДПроверка архива вместе с живым изображением
03 / НАШ ПОДХОДНаглядное обсуждение ракурсов и трасс

Начинаем с того, что нужно увидеть

Для въезда, кассовой зоны и общего обзора территории нужны разные ракурсы. Уточняем задачу каждой камеры, расстояние до объекта наблюдения и условия освещения. При проектировании учитываем высоту установки, препятствия, кабельные трассы и возможность обслуживания. Количество камер само по себе не определяет качество системы.

ПРИНЦИП РАБОТЫКак работает видеонаблюдениеУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Камера01
Локальная запись02
Просмотр03

Сеть и питание — часть видеонаблюдения

Пропадание изображения может быть связано с камерой, PoE-коммутатором, радиомостом или перегрузкой канала. Проверяем цепочку целиком. Для удалённых площадок отдельно оцениваем пропускную способность и доступ к локальному архиву, чтобы просмотр через интернет не мешал основной работе объекта.

Наш опыт: от трасс до удалённой диагностики

В практике команды есть работа со схемами камер и кабельных трасс на строительных объектах, а также диагностика регистраторов и связи между удалёнными площадками. Используем планы и наглядные схемы для обсуждения зон обзора. Условную визуализацию всегда отделяем от точной монтажной документации и проверяем привязки по исходным материалам.

Архив проверяем отдельно от живого видео

Открывающаяся камера ещё не означает, что запись сохраняется. Проверяем дату и время, режим записи, состояние накопителей и поиск фрагмента. Срок хранения зависит от числа камер, разрешения, интенсивности записи и ёмкости дисков. Рассчитываем его под задачу и подтверждаем на выбранной конфигурации.

Доступ для владельца и ответственных

Разделяем права просмотра и администрирования, согласуем устройства для удалённого доступа. После настройки проверяем соединение из нужной сети и просмотр архива. Изменения паролей и состава пользователей учитываем в сопровождении. Для расширения системы заранее оцениваем запас по портам, питанию и хранилищу.

Вопросы и ответы

Можно ли оставить существующие камеры?

Да, если совместимость, состояние и качество изображения подходят задаче. Сначала обследуем систему и выявляем ограничения.

Будет ли запись при пропадании интернета?

При локальном регистраторе запись может продолжаться, если питание и локальная сеть исправны. Это нужно проверить на конкретной системе.

Можно ли смотреть камеры с телефона?

Да, для совместимого оборудования настраиваем согласованный способ доступа и права. Работу проверяем через сеть, которой пользуется ответственный.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file +Видеонаблюдение для бизнеса: камеры, архив и удалённый доступ | servaki.online
Услуги / Нужный ракурс. Доступная запись.

Видеонаблюдение для бизнеса: камеры, архив и удалённый доступ

Помогаем видеть нужную зону и находить запись нужного события. Рассматриваем видеонаблюдение как единую систему: обзор, освещение, сеть, питание, регистратор и доступ ответственных.

Команда servaki.online · · 3 мин чтения

Инженер и владельцы гостевого дома оценивают обзор наружной камеры
Нужный ракурс. Доступная запись. · Изображение создано ИИ, без данных и фотографий клиентов
01 / НАШ ПОДХОДОпыт с сетевой частью и удалёнными регистраторами
02 / НАШ ПОДХОДПроверка архива вместе с живым изображением
03 / НАШ ПОДХОДНаглядное обсуждение ракурсов и трасс

Начинаем с того, что нужно увидеть

Для въезда, кассовой зоны и общего обзора территории нужны разные ракурсы. Уточняем задачу каждой камеры, расстояние до объекта наблюдения и условия освещения. При проектировании учитываем высоту установки, препятствия, кабельные трассы и возможность обслуживания. Количество камер само по себе не определяет качество системы.

ПРИНЦИП РАБОТЫКак работает видеонаблюдениеУсловная схема движения сигнала, без реальных данных и настроек клиентов.
Камера01
Локальная запись02
Просмотр03

Сеть и питание — часть видеонаблюдения

Пропадание изображения может быть связано с камерой, PoE-коммутатором, радиомостом или перегрузкой канала. Проверяем цепочку целиком. Для удалённых площадок отдельно оцениваем пропускную способность и доступ к локальному архиву, чтобы просмотр через интернет не мешал основной работе объекта.

Наш опыт: от трасс до удалённой диагностики

В практике команды есть работа со схемами камер и кабельных трасс на строительных объектах, а также диагностика регистраторов и связи между удалёнными площадками. Используем планы и наглядные схемы для обсуждения зон обзора. Условную визуализацию всегда отделяем от точной монтажной документации и проверяем привязки по исходным материалам.

Архив проверяем отдельно от живого видео

Открывающаяся камера ещё не означает, что запись сохраняется. Проверяем дату и время, режим записи, состояние накопителей и поиск фрагмента. Срок хранения зависит от числа камер, разрешения, интенсивности записи и ёмкости дисков. Рассчитываем его под задачу и подтверждаем на выбранной конфигурации.

Доступ для владельца и ответственных

Разделяем права просмотра и администрирования, согласуем устройства для удалённого доступа. После настройки проверяем соединение из нужной сети и просмотр архива. Изменения паролей и состава пользователей учитываем в сопровождении. Для расширения системы заранее оцениваем запас по портам, питанию и хранилищу.

Вопросы и ответы

Можно ли оставить существующие камеры?

Да, если совместимость, состояние и качество изображения подходят задаче. Сначала обследуем систему и выявляем ограничения.

Будет ли запись при пропадании интернета?

При локальном регистраторе запись может продолжаться, если питание и локальная сеть исправны. Это нужно проверить на конкретной системе.

Можно ли смотреть камеры с телефона?

Да, для совместимого оборудования настраиваем согласованный способ доступа и права. Работу проверяем через сеть, которой пользуется ответственный.

Следующий шаг

Расскажите, что должно работать

Укажите ваш объект, существующее оборудование и задачу. Разберём исходные условия, уточним необходимые доступы и предложим порядок работ. Стоимость и сроки согласуем до начала.

\ No newline at end of file diff --git a/verify.py b/verify.py index 03b3271..9e0f807 100644 --- a/verify.py +++ b/verify.py @@ -60,6 +60,10 @@ def main(): scenes=json.loads((ROOT/'content/flow-scenes.json').read_text(encoding='utf-8')) image_motion=json.loads((ROOT/'content/image-motion.json').read_text(encoding='utf-8')) pages=json.loads((ROOT/'content/pages.json').read_text(encoding='utf-8')) + photo_manifest=json.loads((ROOT/'content/photo-manifest.json').read_text(encoding='utf-8')) + photo_edits=json.loads((ROOT/'content/photo-edit-prompts.json').read_text(encoding='utf-8'))['edits'] + assert len(photo_manifest)==len(pages)==12,'photo manifest coverage' + assert set(photo_edits)=={'video-surveillance','horeca','agriculture','construction'},'localized photo coverage' card_copy=json.loads((ROOT/'content/card-copy.json').read_text(encoding='utf-8')) assert set(scenes)=={p['slug'] for p in pages},'missing or extra equipment scene' assert set(image_motion)==set(scenes),'missing or extra animated illustration' @@ -108,7 +112,8 @@ def main(): else:raise AssertionError('Negative control did not detect broken image') locations=[e.text for e in ET.parse(PUBLIC/'sitemap.xml').iter() if e.tag.endswith('}loc')] assert len(locations)==16 and len(set(locations))==16,'sitemap pages' - small_photos=list((PUBLIC/'assets/editorial').glob('photo-*-480.webp')) + small_photos=[PUBLIC/'assets/editorial'/f'{item.get("asset","photo-"+item["slug"])}-480.webp' for item in photo_manifest] + assert all(p.is_file() for p in small_photos),'missing current article photograph' assert len(small_photos)==len(pages) and max(p.stat().st_size for p in small_photos)<50000,'oversized mobile photograph' illustration_budgets={480:50000,960:130000,1536:250000} illustration_max_bytes={} diff --git a/verify_live.py b/verify_live.py index 0be0695..9271aa2 100644 --- a/verify_live.py +++ b/verify_live.py @@ -42,6 +42,10 @@ def main(): PUBLIC / 'assets/editorial/motion.css', PUBLIC / 'assets/editorial/motion.js', PUBLIC / 'assets/editorial/photo-networks-vpn-960.webp', + PUBLIC / 'assets/editorial/photo-video-surveillance-ru-960.webp', + PUBLIC / 'assets/editorial/photo-horeca-ru-960.webp', + PUBLIC / 'assets/editorial/photo-agriculture-ru-960.webp', + PUBLIC / 'assets/editorial/photo-construction-ru-960.webp', PUBLIC / 'assets/editorial/networks-vpn-480.webp'] mismatches = [] for file in selected: