Автор:
Джон Л. Уотсон (John L. Watson)ОригиналApache Kafka вполне законно ассоциируется у нас с событийно-ориентированной архитектурой, большими данными, а еще с микросервисами, от которых сейчас все без ума. Это гибкая платформа с широкими возможностями, поэтому она популярна как для коммерческих, так и для опенсорс-решений. По факту она стала стандартом отрасли и любимым словом рекрутеров, наряду с «фулстеком», «микрофронтендами» и «полиглотом». По
некоторым оценкам, чуть ли не 40% компаний из Fortune 500 используют Kafka. И это, возможно, ещё очень скромные цифры.
В этой статье я расскажу, как изучал Apache Kafka и с какими трудностями столкнулся. Я очень надеюсь, что мои наблюдения помогут тем, кто ещё только приступает к знакомству с платформой. Здесь мы обсудим полезные ресурсы, в основном, книги, которые я прочитал, и мой опыт с платформой — до чтения книг и после.
Дисклеймер от Слёрм. Если вы хотите изучить Apache Kafka быстрее и получить обширные знания от экспертов в этой области, Слёрм подготовил курс Apache Kafka База.Я не претендую на звание эксперта по Kafka. (Было бы здорово, если бы люди чаще себе в таком признавались.) Я много лет использую Kafka и довольно неплохо с ней управляюсь, понимаю её экосистему и инструменты, работал с ней как дев и как опс. Иногда я выступал с презентациями на местных митапах и даже вошёл в топ-10 авторов по Apache Kafka на Quora.
Я примостился на скромном пятом месте среди истинных легенд в мире Kafka: Emil Koutanov, Stéphane Maarek, Hans Jespersen, Jay Kreps, Kai Wähner и Gwen Shapira. До них я, конечно, не дотягиваю, но все равно немножко собой горжусь.
Effective Kafka: A Hands-on Guide to Building Robust and Scalable Event-Driven Applications
Автор: Эмиль Кутанов (Emil Koutanov) Я начал использовать Kafka в 2017 году, когда это была уже зрелая технология с подробной документацией и кучей статей по теме. Я пошел по проторенному пути — почитал официальную документацию и полагался на Stack Overflow в остальном. Мы делали приложения, которые прекрасно работали... до поры до времени. Иногда мы теряли пару сообщений. Иногда консьюмеры зависали без видимых причин, и это приводило к перебалансировке. А иногда сообщения поступали не по порядку. Так или иначе все было
терпимо — как у любого другого опенсорс-проекта. Я думал, у нас всё более или менее под контролем, а если что-то случалось, я винил в этом баг в Kafka или действия ребят из DevOps, обслуживавших Kafka, Spark, Hadoop, Cassandra и другие опенсорс-платформы, которые мы тогда использовали. Все изменилось, когда в 2020 году на Leanpub я увидел неприметную книжицу с хорошей скидкой по акции. В аннотации было сказано, что это книга про архитектуру, распределённые вычисления, модели согласованности, безопасность и т. д. То есть, вроде как, не очередной мануал по Kafka. И стоила она как пара чашек кофе.
Представляете? Как оказалось, у автора превосходный слог. Как он владеет языком, как строит предложения, какие слова подбирает! Настоящий литературный шедевр. Не сравнится с тем чтивом, что нам обычно предлагают сегодня специализированные издательства. Почему это так важно? Потому что автору удаётся разъяснять сложные идеи простыми словами. Хороший автор использует язык для выражения своих мыслей, для самовыражения, а не ради славы и денег. Я ценю хорошую литературу и хороший слог, тем более что сам им не владею. Конечно, это субъективное мнение, и вряд ли это хорошая реклама, если вам просто срочно нужно решить какую-то проблему в Kafka.
Effective Kafka: A Hands-on Guide to Building Robust and Scalable Event-Driven Applications — это во всех смыслах превосходная книга. В первых главах я ничего особо нового не нашёл, потому что уже был знаком с платформой и это была не первая моя книга про Kafka (об этом позже). Зато с третьей главы стало интересно. Я усомнился в своих знаниях, но и на слово автору верить не собирался. Тогда это была новая книга, без отзывов, и я не знал, насколько автор в теме, так что я закопался в официальные документы и исходный код Kafka. Так-то я и узнал, почему у нас сообщения пропадают. Батчи записей в пуле потоков потреблялись при непрерывном поллинге консьюмера, чтобы поддерживать насыщенность пула. Клиент консьюмера делал для записей офсет, пока они еще были in flight. И все это было написано в книге, чёрным по белому. А мы это пропустили. Мои инвестиции в книгу сразу же многократно окупились.
Я до чтения «Effective Kafka»
В десятой главе я сделал ещё одно открытие. Я узнал, почему сообщения публикуются не в том порядке, в каком отправляет их продюсер. Тут проблема была в настройке по умолчанию для свойства max.in.flight.requests.per.connection, которая разрешала продюсерам менять порядок записей при определённых условиях. Я снова перепроверил всё в официальной документации и нашёл подтверждение — среди описания тысяч других свойств. Если бы не книга, я бы ни за что не нашёл эту иголку в стоге сена. Это один из главных недостатков Kafka лично для меня. Гибкость — это хорошо, конечно, но нужно же разобраться в куче разных параметров и правильно их настроить, иначе они могут серьёзно нарушить работу системы. Если рядом нет эксперта, придётся несколько дней сидеть над свойствами конфигурации клиента и разбираться, какие из них относятся к конкретной проблеме.
Я продолжил чтение и к пятнадцатой главе решил оставшуюся часть наших проблем. Внезапно я сам стал экспертом по Kafka.
В книге очень много примеров на Java и небольших фрагментов конфигурации. Примеры поддержаны репозиторием GitHub, поэтому писать код не придётся. Все примеры рабочие, я проверял! Если вы не работаете с Java, наверное, примеры можно как-то адаптировать на другие языки, но я не пробовал.
Книга подойдёт не только для разработчиков, но и для команды эксплуатации. В ней подробно описана конфигурация и управление кластером, а ещё контейнеризация и безопасность. Часть про безопасность, пожалуй, здесь лучше, чем в любой другой книге.
Effective Kafka — это с большим отрывом лучшая книга про Apache Kafka. Она подходит всем — от самых зелёных новичков до тех, кто мнит себя экспертом по теме. (Просто поверьте.) Думаю, лучшее в книге, — это не технические детали, а способ передачи мыслей. Эмиль хорошо разбирается в нескольких областях, и эта книга — кладезь знаний, а не просто источник информации. Мне очень понравились разделы про liveness и safety, хоть я и не сразу понял, причём тут Kafka. Очень даже причём. Иногда мы сами не понимаем, какие знания нам нужны, и они приходят с неожиданной стороны. Погуглите «free ebook on kafka pdf» и обязательно что-нибудь найдёте. Но не факт, что это будет что-то полезное.
Я очень рад, что мне попалась такая книга, и безмерно благодарен Эмилю. Во время чтения я вдруг понял, что он мейнтейнер
Kafdrop — инструмента, который мы уже несколько лет используем в работе. Книга меня так потрясла, что захотелось тут же вылететь из Окленда в Сидней, чтобы встретиться с автором за обедом, но вмешалась пандемия. Надеюсь, у меня получится пообщаться с Эмилем хотя бы онлайн.
Kafka: The Definitive Guide
Авторы: Неха Наркеде (Neha Narkhede), Гвен Шапира (Gwen Shapira) и Тодд Палино (Todd Palino).Книга есть на русском — прим. пер.
The Definitive Guide — первая книга, которую я прочитал о Kafka. Когда мы переходили с ActiveMQ на Kafka, было много неразберихи, и компания купила несколько экземпляров The Definitive Guide, чтобы помочь нам понять, что к чему. (Но больше для того, чтобы успокоить разработчиков, которые так любят жаловаться на новые технологии, навязанные им сверху.) Хорошо, что мы начали именно с этой книги.
В то время большинство разработчиков использовало брокер MQ на JMS, и само понятие стриминга событий было нам чуждо. Нам казалось, что это слишком мудрёная система. Партиции, офсеты, группы консьюмеров, строгая последовательность, at least once delivery… Зачем нужна вся эта ерунда, когда мы годами обходились топиками и очередями? Тогда никто не понимал, чем события отличаются от команд, и хотя событийно-ориентированнаяархитектура не была новинкой, её вряд ли можно было назвать мейнстримом. Тогда большинство микросервисов использовало REST, а крутые ребята баловались с gRPC, Kafka, Kubernetes и монорепозиториями.
Kafka не просто платформа. Это конкретное проявление идеологии использования событий. Мне кажется, документация не разъясняет этот момент. Там максимально точно описаны технические детали, но ты недоумеваешь, зачем все это нужно. Это только моё мнение, но мне кажется, что типичный разработчик заглядывает в документацию по Kafka, просто чтобы узнать, как заставить её работать так же, как ActiveMQ. Это совершенно неправильный подход, но так происходит чаще, чем думают мейнтейнеры Kafka. Мне кажется, именно поэтому Kafka разделила всех на два полюса: ее сторонники действительно понимали, зачем нужна строгая последовательность и at least once delivery, а остальные просто искали улучшенную версию RabbitMQ. Если честно, я тоже сначала примкнул к последним.
А потом прочёл
Kafka: The Definitive Guide. Авторы очень доступно объясняют сложные концепции, показывая не только как, но и почему. В книге описывается контекст и проводится разделение между вариантами, где нужна платформа потоковой обработки событий, и сценариями, где лучше подходят очереди сообщений.
Помню, сначала подумал, что это будет скорее маркетинг, тем более что два из трёх авторов работали в Confluent. К счастью, я ошибся. Там упоминаются некоторые опенсорс-проекты Confluent, и это объяснимо. Так же было с Kafdrop в Effective Kafka. В целом, написано объективно и беспристрастно. Здесь хорошо объясняются базовые темы, можно читать без подготовки.
Сейчас я полагаюсь на Effective Kafka и давно не заглядываю в The Definitive Guide, но для объективности этого обзора перечитал её заново. Мне по-прежнему понравилось. Отличная книга адекватного размера и по адекватной цене. Кстати, The Definitive Guide вышла раньше, чем Effective Kafka.
В первых главах The Definitive Guide разъясняются ключевые понятия, а не конкретные детали и примеры. Такой же подход используется в Effective Kafka. У вас есть шанс сначала разобраться, с чем вы имеете дело. Эта книга дает знания, а не инструкции!
Сравнение The Definitive Guide и Effective Kafka
-
The Definitive Guide описывает технические детали платформы, а Effective Kafka ещё рассказывает об архитектуре и лучших практиках, а также разъясняет некоторые концепции распределённых вычислений.
- В Effective Kafka описаны основные опенсорс-компоненты платформы — Kafka и ZooKeeper. The Definitive Guide также рассказывает о продуктах Confluent, например, Replicator и Schema Registry.
-
The Definitive Guide гораздо короче, чем Effective Kafka — 280 страниц против 460. Я не знал, что она такая короткая, пока не перечитал. Если это важно, The Definitive Guide вы прочтёте быстрее.
-
The Definitive Guide подойдёт, скорее, для начального и среднего уровня. Effective Kafka хороша как для новичков, так и для настоящих спецов.
- В Effective Kafka гораздо подробнее описаны топологии развёртывания и сети, включая даже Docker и Kubernetes. The Definitive Guide вышла на три года раньше, чем Effective Kafka. Возможно, поэтому там ничего не сказано о Docker и Kubernetes.
- В обеих книгах достаточно примеров на Java. Effective Kafka описывает больше API продюсеров и консьюмеров и ссылается на репозиторий GitHub.
-
Effective Kafka описывает больше инструментов — не только CLI, которые поставляются с Kafka, но и сторонние веб-интерфейсы, например, Kafdrop. Что неудивительно, ведь автор — мейнтейнер Kafdrop.
The Definitive Kafka короче, поэтому в ней меньше информации. Там совсем или почти не описаны некоторые темы, которые рассматриваются в
Effective Kafka, например:
-
Статическое членство в группах — используется, в основном, в деплоях в стиле Kubernetes, где поды быстро появляются и так же быстро исчезают.
-
Перебалансировка прослушивателей — упоминается, но вскользь. Возможно, вам понадобятся эти знания, чтобы правильно реализовать эксклюзивность консьюмеров.
-
Транзакции — книга написана до распространения транзакций Kafka. В Effective Kafka этой теме посвящена целая глава.
-
Exactly-once delivery — упоминается в контексте идемпотентных операций записи, но не раскрыта полностью без обсуждения транзакций.
-
Устойчивость к потере данных, например, повторные попытки, недоставленные сообщения, таймауты и т. д., рассматривается недостаточно подробно. В Effective Kafka, например, сбоям посвящена целая глава. По опыту могу сказать, что в реальным системах с Kafka об этом аспекте часто забывают.
- Про advertised.listeners ни слова. Это плохо, ведь о них следует знать каждому уважающему себя разработчику и администратору. Думаю, отчасти это связано с тем, как Kafka обычно развёртывали в 2017 году — на виртуальных машинах или bare metal. Может быть, тогда было не так актуально настраивать несколько прослушивателей, но сейчас всё поменялось. Сегодня большинство разработчиков используют Kafka и ZooKeeper локально с Docker Compose.
-
Квоты упоминаются только в контексте мониторинга. В общей инфраструктуре Kafka в средних и крупных организациях без квот не обойтись. В Effective Kafka квотам посвящена целая глава, и не зря.
-
Безопасность в The Definitive Guide встречается в трех абзацах. Там едва упоминается SASL, главный протокол аутентификации брокера. Сертификаты и списки контроля доступа (ACL) не упоминаются вовсе. В Effective Kafka этой теме уделяется — внимание! – 80 страниц. Представляете? Прямо книга внутри книги. И там только полезная информация.
-
Стратегия назначения партиций в The Definitive Guide рассматривается кратко — только различия между RoundRobinAssignor и RangeAssignor. В Effective Kafka подробно описаны все четыре метода назначения, с примерами и сравнениями.
В
The Definitive Guide тоже есть несколько тем, которые не затрагиваются в
Effective Kafka:
-
Сборка мусора: удивительно, но в The Definitive Guide рассказывается о настройке производительности сборки мусора, а в Effective Kafka — нет. Правда, вместо G1 в больших кучах теперь используется ZGC, но кое-что полезное можно узнать.
- О мониторинге JMX в Effective Kafka ничего не говорится. В The Definitive Guide этой теме уделена пара абзацев.
Есть незначительные отличия в терминологии. Для консьюмеров, которые не связаны с группой консьюмеров, в
The Definitive Guide используется термин standalone, а в
Effective Kafka — free. Главный цикл, который делает опрос для записей на консьюмере и обрабатывает получившийся батч, называется poll-process loop в
Effective Kafka и просто poll loop — в
The Definitive Guide.
В целом, Effective Kafka может решить почти любые вопросы — не придется обращаться к сторонней документации, блогам, KIP или другим книгам. Официальная документация пригодится для справки, но она не особо нужна. В The Definitive Guide, с другой стороны, даётся общий обзор среднего уровня, а недостающие детали можно найти в официальной документации. Единственное, чего мне не хватает в Effective Kafka, — оглавления.
Если сравнивать две книги, видно, сколько усилий было вложено в Effective Kafka. The Definitive Guide хорошая книга, но понемногу устаревает. Было бы здорово, если бы вышло второе издание. В Effective Kafka гораздо больше очень важных деталей. Она подробнее, чем The Definitive Guide и даже официальная документация. Автор говорит, что узнал все это из анализа исходного кода Kafka, истории коммитов и изучения Kafka Improvement Proposals (KIP). Даже не представляю, сколько работы пришлось проделать. Описание архитектуры в Effective Kafka никогда не потеряет актуальности, потому что относится к любой технологии. Effective Kafka станет классикой.
Если бы я писал эту статью в 2019 году, то назвал бы The Definitive Guide лучшей книгой о Kafka. Но Effective Kafka и еще пара книг полностью изменили мой взгляд на то, какой должна быть книга. Это невероятный источник мудрости и знаний. При этом The Definitive Guide очень хорошо читается и занимает достойное место на моей книжной полке. Я купил себе домой бумажный экземпляр, хотя у нас их было несколько на работе. Выражаю огромную благодарность авторам за то, что помогли мне познакомиться с этой потрясающей платформой и вложили столько энергии в её создание. У меня есть бумажный экземпляр Effective Kafka, и я надеюсь, что однажды автор его подпишет.
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
Автор: Мартин Клеппман (Martin Kleppmann)Не удивляйтесь, но третья книга в моем списке вообще не о Kafka. Я уже представил две отличные книги на эту тему, третья была бы лишней.
Может быть, на это стоило бы закончить список? Как я уже говорил, иногда мы сами не понимаем, какие знания нам нужны, и они приходят с неожиданной стороны.
Зачем проектировать приложения в рамках событийно-ориентированной архитектуры? Какие еще паттерны и принципы стоит рассмотреть? Как добиться согласованности в распределённой системе? Как упорядочивать и хранить данные? Какие сбои нужно предусмотреть? Kafka — это всего один компонент распределённой архитектуры. Недостаточно быть экспертом по Kafka, чтобы ориентироваться в современном сложном мире разработки.
Designing Data-Intensive Applications The big ideas behind reliable, scalable & maintainable systems (Проектирование высоконагруженных приложений. Что помогает обеспечивать надежность, масштабируемость и поддержку систем)
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems («Высоконагруженные приложения. Программирование, масштабирование, поддержка») — это ещё один литературный шедевр, который украсит любую книжную полку и долго не потеряет актуальности. В книге рассматриваются три главных принципа проектирования приложений: надежность, масштабируемость и простота поддержки.
По названию можно подумать, что это очередная книга о биг дате. Это не так. Designing Data-Intensive Applications — книга об архитектуре распределённых систем. Её единственный недостаток — название, которое вводит в заблуждение. Здесь бы лучше смотрелось что-то вроде «Проектирование надежных и масштабируемых распределённых приложений». Правда, слово data в названии упоминается не зря — зачем нам распределённые системы без данных?
Маленькое примечание: книга не о Kafka, но она там упоминается. Автор не новичок в Kafka — Мартин был senior-разработчиком в LinkedIn (в инкубаторе которого зародилась Kafka), и он один из мейнтейнеров
Apache Samza — фреймворка в стиле
MapReduce для распределённой обработки больших потоков событий, где Kafka служит для передачи сообщений.
К чему я клоню? Некоторые книги делят нашу жизнь на «до» и «после». Мы отказываемся от прошлых убеждений и обретаем новые. У меня так и было, когда я прочел Designing Data-Intensive Applications в 2018. А потом в 2020, уже с Effective Kafka. У авторов схожий стиль изложения, вплоть до грамматических конструкций. Они используют сноски и примечания, чтобы добавить что-то интересное и забавное, и от этого книги читаются ещё лучше. Они подбирают превосходные аналогии. Я смеялся, когда Эмиль проводил параллель между криминологией XVIII века и презумпцией невиновности с одной стороны и свойствами safety и liveness в распределённых системах — с другой. А миграции схем баз данных он сравнивает с изменением ширины колеи в XIX веке. Мне особенно понравилось, как Мартин вспомнил о мейнфреймах 60-х и 70-х годов, показывая, что история повторяется. Обе книги очень хорошо написаны, нигде не заметно, что глава писалась второпях, в погоне за дедлайнами издателя. Подсознательно я стараюсь копировать этот стиль. И даже не стесняюсь этого.
В Designing Data-Intensive Applications Мартину удалось кратко (хоть книга и получилась объемной) изложить свои превосходные исследования. Основные темы книги:
- Модели данных (реляционные, ключ-значение, граф и т. д.), структуры данных и индексы.
- Модели сохраняемости (B-деревья, LSM).
- Форматы данных (JSON, XML, Avro, Thrift, Protobuf и т. д.). Кстати, Мартин — один из мейнтейнеров Avro.
- Репликация — лидер-фоловер, отставание, репликация с несколькими лидерами, конфликты записи, кворумная репликация.
- Транзакции — уровни изоляции, перекос при чтении и записи, механизмы контроля параллелизма (последовательный, пессимистичный и оптимистичный).
- Сбои в распределённых системах — время и синхронизация часов, византийская ошибка, таймауты и асинхронность.
- Распределённые алгоритмы, модели согласованности, порядок, распределённые транзакции и консенсус.
- Обработка батчей, MapReduce и обработка потоков.
Глядя на список тем, можно испугаться, что там все очень сложно. Но автору блестяще удается говорить о сложных концепциях простыми словами.
Эта книга не научит вас обращаться с Kafka — для этого есть Effective Kafka. И её определённо нельзя прочитать за один присест. Читайте вдумчиво, не торопясь. Эта книга изменит ваш взгляд на распределённые системы и подход к работе. Сколько заблуждений у меня было, пока я не прочёл книгу Мартина! Вот некоторые из не самых постыдных:
- Я думал, что ACID подходит только для реляционных баз данных, хотя я достаточно хорошо понимал этот подход и почти всегда правильно выбирал уровни изоляции. На самом деле, ACID подходит для любой системы, которая обрабатывает данные, и особенно важен для распределённых систем.
- Я слышал о моделях согласованности только в контексте итоговой согласованности и думал, что она бывает сильная и слабая, и все. Я и не представлял, какой разной бывает согласованность, и не только по шкале «сильная-слабая». В некоторых моделях возникают разные побочные эффекты, которые даже не влияют на силу и слабость.
- Я всегда связывал распределённые системы с микросервисами и считал их шагом вперед по сравнению с монолитами. Я не думал о том, как сложно устранять сбои, если упала только часть системы. Просто подожди и попробуй снова. Что тут сложного?
Знания, которые дает
Designing Data-Intensive Applications, никогда не устареют. Это шедевр технической литературы, который станет классикой.
Что еще почитать про Apache Kafka?
Я, конечно, читал и другие книги о Kafka. Могу ли я ещё что-то порекомендовать. Извините, но нет.
Не хочу говорить ничего плохого об авторах, ведь написание книги требует огромных усилий, даже если книга потом не оправдала ожидания читателей. Я прочёл много книг о популярных опенсорс-технологиях, в основном, издательств Safari, Manning и Packt, и выделил для себя два типа авторов. Первые прекрасно разбираются в теме, очень увлечены ей и жаждут поделиться знаниями. Они уже признанные эксперты, им не нужно писать книгу, чтобы это доказывать. Второй тип — «карьеристы». Они неплохо разбираются в теме, но книга им нужна для статуса и строчки в резюме.
Делать карьеру — это хорошо, если только ты не пытаешься выманить у аудитории побольше денег. К сожалению, на Amazon можно найти парочку таких авторов. Не буду называть имен, но вы сразу распознаете их по ужасным отзывам. Например, таким:
Это не книга, а просто компиляция статей из блогов. Она не представляет никакой ценности, все это можно найти в бесплатных документах по Apache Kafka. Полный провал. Не советую читать даже бесплатно.
Полностью согласен! Я почувствовал то же самое. Сложно поверить, что кто-то пишет такое всерьез. Вот реальный дословный отрывок:
Для запуска кластеров Hadoop и Storm вам понадобятся технологии работы с большими данными, например Hadoop и Storm.
Для Hadoop нужен Hadoop? Да ладно? В общем, прежде чем купить книгу, убедитесь, что автор разбирается в теме и реально работает с проектами. Кроме книг, о которых я рассказал, я ничего достойного больше не находил. Если вам что-то попадётся, пишите!
В целом, можно начать работу с Kafka, изучив официальную документацию и почитав популярные блоги. Но учтите: Kafka — комплексная платформа со множеством вариантов использования и тысячами вариантов конфигурации. Разобраться во всем этом настолько сложно, что даже опытные специалисты по Kafka, бывает, ошибаются. Мне ли не знать. Блоги обычно пишут люди, которые разбираются в теме чуть больше, чем обычный человек. Они не всегда правы. Говорю по своему опыту. Официальная документация полезна для справки, но точно не как источник мудрости.
Чтобы совершать меньше ошибок, начиная работать с Apache Kafka, приходите на курс Слёрма Apache Kafka База.Если мы хотим чего-то добиться, нужно вкладывать в обучение.
Умный человек учится на своих ошибках, а мудрый — на чужих. Советую почитать книги, о которых я рассказал. Они определённо помогут вам развиваться в профессиональном плане.
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <!--metatextblock-->
<title>Лучшие книги по Apache Kafka | Блог slurm.io</title>
<meta name="description" content="«Effective Kafka: A Hands-on Guide to Building Robust and Scalable Event-Driven Applications», «Kafka: The Definitive Guide» и другие издания | Блог slurm.io">
<meta name="keywords" content="">
<meta name="robots" content="index, follow" />
<meta property="og:title" content="Лучшие книги по Apache Kafka | Блог slurm.io" />
<meta property="og:description" content="«Effective Kafka: A Hands-on Guide to Building Robust and Scalable Event-Driven Applications», «Kafka: The Definitive Guide» и другие издания | Блог slurm.io" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://slurm.io/blog/tpost/m45fr2d1n1-luchshie-knigi-po-apache-kafka" />
<meta property="og:image" content="https://static.tildacdn.com/tild6237-3161-4464-a432-343065393436/Kafka-books.png" />
<link rel="canonical" href="https://slurm.io/blog/tpost/m45fr2d1n1-luchshie-knigi-po-apache-kafka" />
<link rel="alternate" type="application/rss+xml" title="Блог Слёрм" href="https://slurm.io/rss-feed-784947206928.xml" />
<link rel="amphtml" href="https://slurm.io/blog/tpost/m45fr2d1n1-luchshie-knigi-po-apache-kafka?amp=true">
<!--/metatextblock--> <meta name="format-detection" content="telephone=no" /> <meta http-equiv="x-dns-prefetch-control" content="on"> <link rel="dns-prefetch" href="https://ws.tildacdn.com"> <link rel="dns-prefetch" href="https://static.tildacdn.com"> <link rel="icon" type="image/x-icon" sizes="32x32" href="https://static.tildacdn.com/tild3464-3565-4434-a430-373739393736/ico.svg" media="(prefers-color-scheme: light)"/> <link rel="icon" type="image/x-icon" sizes="32x32" href="https://static.tildacdn.com/tild3535-3833-4738-b061-623531623164/ico.svg" media="(prefers-color-scheme: dark)"/> <link rel="icon" type="image/svg+xml" sizes="any" href="https://static.tildacdn.com/tild6162-3561-4239-b037-363439656331/ico.svg"> <link rel="apple-touch-icon" type="image/png" href="https://static.tildacdn.com/tild6236-6662-4664-b736-623463326262/ico.png"> <link rel="icon" type="image/png" sizes="192x192" href="https://static.tildacdn.com/tild6236-6662-4664-b736-623463326262/ico.png"> <link rel="alternate" type="application/rss+xml" title="Slurm" href="https://slurm.io/rss.xml" /> <!-- Assets --> <script src="https://neo.tildacdn.com/js/tilda-fallback-1.0.min.js" async charset="utf-8"></script> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-grid-3.0.min.css" type="text/css" media="all" onerror="this.loaderr='y';"/> <link rel="stylesheet" href="https://static.tildacdn.com/ws/project705564/tilda-blocks-page13384934.min.css?t=1771492760" type="text/css" media="all" onerror="this.loaderr='y';" /><link rel="stylesheet" href="https://static.tildacdn.com/ws/project705564/tilda-blocks-page29874943.min.css?t=1771508958" type="text/css" media="all" onerror="this.loaderr='y';" /><link rel="stylesheet" href="https://static.tildacdn.com/ws/project705564/tilda-blocks-page13176281.min.css?t=1771508958" type="text/css" media="all" onerror="this.loaderr='y';" /> <link rel="preconnect" href="https://fonts.gstatic.com"> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&subset=latin,cyrillic&display=swap" rel="stylesheet"> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-animation-2.0.min.css" type="text/css" media="all" onerror="this.loaderr='y';" /> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-feed-1.1.min.css" type="text/css" media="all" /> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-popup-1.1.min.css" type="text/css" media="print" onload="this.media='all';" onerror="this.loaderr='y';" /> <noscript><link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-popup-1.1.min.css" type="text/css" media="all" /></noscript> <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-slds-1.4.min.css" type="text/css" media="print" onload="this.media='all';" onerror="this.loaderr='y';" /> <noscript><link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-slds-1.4.min.css" type="text/css" media="all" /></noscript> <link rel="stylesheet" type="text/css" href="https://ws.tildacdn.com/project705564/custom.css?t=1771492760"> <script nomodule src="https://static.tildacdn.com/js/tilda-polyfill-1.0.min.js" charset="utf-8"></script> <script type="text/javascript">function t_onReady(func) {if(document.readyState!='loading') {func();} else {document.addEventListener('DOMContentLoaded',func);}}
function t_onFuncLoad(funcName,okFunc,time) {if(typeof window[funcName]==='function') {okFunc();} else {setTimeout(function() {t_onFuncLoad(funcName,okFunc,time);},(time||100));}}function t396_initialScale(t){var e=document.getElementById("rec"+t);if(e){var i=e.querySelector(".t396__artboard");if(i){window.tn_scale_initial_window_width||(window.tn_scale_initial_window_width=document.documentElement.clientWidth);var a=window.tn_scale_initial_window_width,r=[],n,l=i.getAttribute("data-artboard-screens");if(l){l=l.split(",");for(var o=0;o<l.length;o++)r[o]=parseInt(l[o],10)}else r=[320,480,640,960,1200];for(var o=0;o<r.length;o++){var d=r[o];a>=d&&(n=d)}var _="edit"===window.allrecords.getAttribute("data-tilda-mode"),c="center"===t396_getFieldValue(i,"valign",n,r),s="grid"===t396_getFieldValue(i,"upscale",n,r),w=t396_getFieldValue(i,"height_vh",n,r),g=t396_getFieldValue(i,"height",n,r),u=!!window.opr&&!!window.opr.addons||!!window.opera||-1!==navigator.userAgent.indexOf(" OPR/");if(!_&&c&&!s&&!w&&g&&!u){var h=parseFloat((a/n).toFixed(3)),f=[i,i.querySelector(".t396__carrier"),i.querySelector(".t396__filter")],v=Math.floor(parseInt(g,10)*h)+"px",p;i.style.setProperty("--initial-scale-height",v);for(var o=0;o<f.length;o++)f[o].style.setProperty("height","var(--initial-scale-height)");t396_scaleInitial__getElementsToScale(i).forEach((function(t){t.style.zoom=h}))}}}}function t396_scaleInitial__getElementsToScale(t){return t?Array.prototype.slice.call(t.children).filter((function(t){return t&&(t.classList.contains("t396__elem")||t.classList.contains("t396__group"))})):[]}function t396_getFieldValue(t,e,i,a){var r,n=a[a.length-1];if(!(r=i===n?t.getAttribute("data-artboard-"+e):t.getAttribute("data-artboard-"+e+"-res-"+i)))for(var l=0;l<a.length;l++){var o=a[l];if(!(o<=i)&&(r=o===n?t.getAttribute("data-artboard-"+e):t.getAttribute("data-artboard-"+e+"-res-"+o)))break}return r}window.TN_SCALE_INITIAL_VER="1.0",window.tn_scale_initial_window_width=null;</script> <script src="https://static.tildacdn.com/js/jquery-1.10.2.min.js" charset="utf-8" onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/tilda-scripts-3.0.min.js" charset="utf-8" defer onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/ws/project705564/tilda-blocks-page13384934.min.js?t=1771492760" charset="utf-8" onerror="this.loaderr='y';"></script><script src="https://static.tildacdn.com/ws/project705564/tilda-blocks-page29874943.min.js?t=1771508958" onerror="this.loaderr='y';"></script><script src="https://static.tildacdn.com/ws/project705564/tilda-blocks-page13176281.min.js?t=1771508958" onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/tilda-lazyload-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/tilda-animation-2.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/tilda-zero-1.1.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/tilda-feed-1.1.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-zero-fixed-1.0.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-zero-forms-1.0.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-zero-gallery-1.0.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-zero-tooltip-1.0.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-zero-video-1.0.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-popup-1.0.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-forms-1.0.min.js" charset="utf-8"></script><link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-forms-1.0.min.css" type="text/css" media="all"><script src="https://static.tildacdn.com/js/tilda-map-1.0.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-vote-1.1.min.js" charset="utf-8"></script><script src="https://static.tildacdn.com/js/tilda-animation-sbs-1.0.min.js" charset="utf-8"></script> <script src="https://static.tildacdn.com/js/tilda-slds-1.4.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/hammer.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/tilda-zero-scale-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script> <script src="https://static.tildacdn.com/js/tilda-events-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script> <!-- nominify begin --><!-- site name --> <meta property="og:site_name" content="Слёрм"> <!-- Pixel --> <script type="text/javascript">
(function (d, w) {
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script");
s.type = "text/javascript";
s.async = true;
s.src = "https://victorycorp.ru/index.php?ref="+d.referrer+"&page=" + encodeURIComponent(w.location.href);
n.parentNode.insertBefore(s, n);
})(document, window);
</script> <!-- /Pixel --> <!-- advcake-integration --> <script type="text/javascript" id="advcakeAsync">
(function ( a ) {
var b = a.createElement("script");
b.async = 1;
b.src = "//p49o7e.ru/";
a=a.getElementsByTagName("script")[0]; a.parentNode.insertBefore(b,a)
})(document);
</script> <!-- astralab --> <script async src="https://creatives.al-adtech.com/SmartPixel/2025/slurm_pixel.js"></script> <!-- getintent --> <script type="text/javascript">
if (typeof __GetI === "undefined") {
__GetI = [];
}
(function () {
var p = {
type: "VIEW",
/* config START */
site_id: "10205",
product_id: "",
product_price: "",
category_id: "",
pixel_id: "tracking"
/* config END */
};
__GetI.push(p);
var domain = (typeof __GetI_domain) == "undefined" ? "px.adhigh.net" : __GetI_domain;
var src = ('https:' == document.location.protocol ? 'https://' : 'http://') + domain + '/t.js';
var script = document.createElement( 'script' );
script.type = 'text/javascript';
script.src = src;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(script, s);
})();
</script> <!-- Код для проброса UTM-меток на ссылки --> <!-- https://slurm.io/utm-forwarding --> <!-- Обновлённая версия без jQuery --> <script>
t_onReady(function () {
var search = "?" + window.location.search.split("&").filter(function(val) {
var value = val.replace(/\?/, '');
return value.indexOf("s_") === -1 && value.indexOf("tfc_") === -1;
}).join("&").replace(/\?/, "");
if (search !== "?") {
var prepareLinks = function (element) {
if (!element) element = document.body;
var aLinks = element.querySelectorAll('a');
var arrayLinks = Array.from(aLinks);
arrayLinks.forEach(function (el) {
var href = el.getAttribute("href");
if (href && href.indexOf("") > -1 && href.indexOf("#") === -1) {
if (href.indexOf("?") === -1) {
el.setAttribute("href", href + search);
} else {
el.setAttribute("href", href + search.replace("?", "&"));
}
}
});
};
/* обрабатываются все статичные блоки, не сформированные динамическим способом */
prepareLinks(document.body);
/* обрабатываются блоки ST3XX с подключенным каталогом */
document.addEventListener('tStoreRendered', function (event) {
if (event.target) {
prepareLinks(event.target);
}
});
/* обрабатывается catalog edu https://slurm.io/catalog */
var eduCatalog = document.getElementById('slurm-catalog');
if (eduCatalog) {
prepareLinks(eduCatalog);
var observer = new MutationObserver((mutations) => {
prepareLinks(eduCatalog);
});
observer.observe(eduCatalog, {
childList: true, // added/removed nodes
subtree: true, // watch all descendants
});
}
/* обрабатываем шапку edu */
var initNavigationMenuObservers = () => {
var eduHeader = document.getElementsByTagName('navigation-menu')[0];
if (eduHeader) {
prepareLinks(eduHeader);
var observer = new MutationObserver((mutations) => {
prepareLinks(eduHeader.shadowRoot);
});
observer.observe(eduHeader.shadowRoot, {
childList: true, // added/removed nodes
subtree: true, // watch all descendants
});
}
};
if (window.customElements && customElements.whenDefined) {
customElements.whenDefined('navigation-menu').then(initNavigationMenuObservers);
}
}
});
</script> <!-- Varioqub experiments --> <script type="text/javascript">
(function(e, x, pe, r, i, me, nt){
e[i]=e[i]||function(){(e[i].a=e[i].a||[]).push(arguments)},
me=x.createElement(pe),me.async=1,me.src=r,nt=x.getElementsByTagName(pe)[0],me.addEventListener('error',function(){function cb(t){t=t[t.length-1],'function'==typeof t&&t({flags:{}})};Array.isArray(e[i].a)&&e[i].a.forEach(cb);e[i]=function(){cb(arguments)}}),nt.parentNode.insertBefore(me,nt)})
(window, document, 'script', 'https://abt.s3.yandex.net/expjs/latest/exp.js', 'ymab');
ymab('metrika.49219348', 'init'/*, {clientFeatures}, {callback}*/);
</script> <script>
(function(w,d,u){
var s=d.createElement('script');s.async=true;s.src=u+'?'+(Date.now()/60000|0);
var h=d.getElementsByTagName('script')[0];h.parentNode.insertBefore(s,h);
})(window,document,'https://cdn-ru.bitrix24.ru/b30620686/crm/site_button/loader_2_5939wy.js');
</script> <script src="https://tglink.io/pixel.sdk.min.js?id=574393"></script> <style>
.b24-widget-button-position-bottom-right {
right: 20px !important;
bottom: 20px !important;
}
</style><!-- nominify end --><script type="text/javascript">window.dataLayer=window.dataLayer||[];</script> <script type="text/javascript">(function() {if((/bot|google|yandex|baidu|bing|msn|duckduckbot|teoma|slurp|crawler|spider|robot|crawling|facebook/i.test(navigator.userAgent))===false&&typeof(sessionStorage)!='undefined'&&sessionStorage.getItem('visited')!=='y'&&document.visibilityState){var style=document.createElement('style');style.type='text/css';style.innerHTML='@media screen and (min-width: 980px) {.t-records {opacity: 0;}.t-records_animated {-webkit-transition: opacity ease-in-out .2s;-moz-transition: opacity ease-in-out .2s;-o-transition: opacity ease-in-out .2s;transition: opacity ease-in-out .2s;}.t-records.t-records_visible {opacity: 1;}}';document.getElementsByTagName('head')[0].appendChild(style);function t_setvisRecs(){var alr=document.querySelectorAll('.t-records');Array.prototype.forEach.call(alr,function(el) {el.classList.add("t-records_animated");});setTimeout(function() {Array.prototype.forEach.call(alr,function(el) {el.classList.add("t-records_visible");});sessionStorage.setItem("visited","y");},400);}
document.addEventListener('DOMContentLoaded',t_setvisRecs);}})();</script></head> <body class="t-body" style="margin:0;"> <!--allrecords--> <div id="allrecords" class="t-records" data-post-page="y" data-hook="blocks-collection-content-node" data-tilda-project-id="705564" data-tilda-page-id="13384934" data-tilda-page-alias="blog" data-tilda-formskey="59b517bfad01153865a4875be1bdd366" data-tilda-stat-scroll="yes" data-tilda-lazy="yes" data-tilda-root-zone="com" data-tilda-project-headcode="yes" data-tilda-ts="y" data-tilda-project-country="RU">
<!-- POST START -->
<!--header-->
<div id="t-header" class="t-records" data-hook="blocks-collection-content-node" data-tilda-project-id="705564" data-tilda-page-id="29874943" data-tilda-page-alias="header-v2" data-tilda-formskey="59b517bfad01153865a4875be1bdd366" data-blocks-animationoff="yes" data-tilda-stat-scroll="yes" data-tilda-lazy="yes" data-tilda-root-zone="one" data-tilda-project-headcode="yes" data-tilda-ts="y" data-tilda-project-country="RU">
<div id="rec743543528" class="r t-rec" style=" " data-animationappear="off" data-record-type="360" >
<!-- T360 -->
<style>
.t-records {
opacity: 0;
}
.t-records_animated {
-webkit-transition: opacity ease-in-out 0.1s;
-moz-transition: opacity ease-in-out 0.1s;
-o-transition: opacity ease-in-out 0.1s;
transition: opacity ease-in-out 0.1s;
}
.t-records.t-records_visible,
.t-records .t-records {
opacity: 1;
}
</style>
<script>
t_onReady(function () {
var allRecords = document.querySelector('.t-records');
window.addEventListener('pageshow', function (event) {
if (event.persisted) {
allRecords.classList.add('t-records_visible');
}
});
var rec = document.querySelector('#rec743543528');
if (!rec) return;
rec.setAttribute('data-animationappear', 'off');
rec.style.opacity = '1';
allRecords.classList.add('t-records_animated');
setTimeout(function () {
allRecords.classList.add('t-records_visible');
}, 200);
});
</script>
<style>
.t360__bar {
background-color: #5c76ff;
}
</style>
<script>
t_onReady(function () {
var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
if (!isSafari) {
document.body.insertAdjacentHTML('beforeend', '<div class="t360__progress"><div class="t360__bar"></div></div>');
setTimeout(function () {
var bar = document.querySelector('.t360__bar');
if (bar) bar.classList.add('t360__barprogress');
}, 10);
}
});
// Функция финализации прогресс-бара
function t360_onProgressLoad() {
var bar = document.querySelector('.t360__bar');
if (!bar) return;
bar.classList.remove('t360__barprogress');
bar.classList.add('t360__barprogressfinished');
setTimeout(function () {
bar.classList.add('t360__barprogresshidden');
}, 20);
setTimeout(function () {
var progress = document.querySelector('.t360__progress');
if (progress) progress.style.display = 'none';
}, 500);
}
// Если документ уже загружен – не вешаем listener, а запускаем сразу (с задержкой, чтобы прогресс-бар успел появиться)
if (document.readyState === 'complete') {
setTimeout(t360_onProgressLoad, 60);
} else {
window.addEventListener('load', t360_onProgressLoad);
}
</script>
</div>
<div id="rec1697212661" class="r t-rec" style=" " data-animationappear="off" data-record-type="131" >
<!-- T123 -->
<div class="t123" >
<div class="t-container_100 ">
<div class="t-width t-width_100 ">
<!-- nominify begin -->
<script defer="defer" src="https://cdn.tilda.edu.slurm.io/navigation_menu/navigation-menu.umd.js"></script>
<!-- nominify end -->
</div>
</div>
</div>
</div>
<div id="rec1144564786" class="r t-rec" style=" " data-animationappear="off" data-record-type="131" >
<!-- T123 -->
<div class="t123" >
<div class="t-container_100 ">
<div class="t-width t-width_100 ">
<!-- nominify begin -->
<link rel="stylesheet" href="https://cdn.tilda.edu.slurm.io/fonts/fonts.css" type="text/css"/>
<!-- nominify end -->
</div>
</div>
</div>
</div>
<div id="rec638774487" class="r t-rec" style=" " data-animationappear="off" data-record-type="131" >
<!-- T123 -->
<div class="t123" >
<div class="t-container_100 ">
<div class="t-width t-width_100 ">
<!-- nominify begin -->
<navigation-menu></navigation-menu>
<!-- nominify end -->
</div>
</div>
</div>
</div>
</div>
<!--/header-->
<style>
.t-feed__post-popup__close-wrapper {
display: none !important;
}
</style>
<div id="rec560736642" class="r t-rec">
<div class="t-feed">
<div class="t-feed__post-popup t-popup_show" style="background-color:#ffffff;display:block;" data-feed-popup-postuid="m45fr2d1n1" data-feed-popup-feeduid="784947206928">
<div class="t-feed__post-popup__close-wrapper">
<a href="https://slurm.io/blog" class="t-popup__close">
<div class="t-popup__close-wrapper">
<svg class="t-popup__close-icon" width="11" height="20" viewBox="0 0 11 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1 1L10 10L1 19" stroke="#170f63" stroke-width="2"/>
</svg>
</div>
</a>
<div class="t-feed__post-popup__close-text-wrapper">
<div class="js-feed-close-text t-feed__post-popup__close-text t-descr t-descr_xxs" style="color:#170f63;">
Блог Слёрм
</div>
</div>
<div class="t-feed__share-container">
<div class="js-feed-share-open t-feed__share-icon" style=" width: 20px; height: 20px; ">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 17.92 15.79" style="fill:#170f63;">
<g data-name="Слой 2">
<path d="M16 9.67v6H.19v-12h7.18a7.1 7.1 0 00-1.46.89 7 7 0 00-1.08 1.11H2.19v8H14v-1.9z"/>
<path d="M17.73 5.7L12.16.13V3.8c-1.45.06-7 .73-7.62 7.08a.07.07 0 00.13 0c.49-1.35 2.11-3.43 7.49-3.52v3.88z"/>
</g>
</svg>
</div>
<div class="t-feed__share " style="background-color:#ffffff;">
<div class="t-feed__share-arrow" style="border-bottom: 8px solid #ffffff;"></div>
<div class="ya-share2" data-access-token:facebook="" data-yashareL10n="en" data-services="facebook,vkontakte," data-counter=""></div>
</div>
</div>
</div>
<div class="t-feed__post-popup__container t-container t-popup__container t-popup__container-static">
<div itemscope itemtype="https://schema.org/BlogPosting" class="t-feed__post-popup__content-wrapper">
<div class="t-feed__post-popup__content t-col t-col_8">
<div style="display: none;">
<meta itemprop="datePublished" content="2022-01-27MSK11:00:00+03:00" />
<meta itemprop="dateModified" content="2025-03-27MSK16:20:36+03:00" />
<meta itemprop="mainEntityOfPage" content="https://slurm.io/blog/tpost/m45fr2d1n1-luchshie-knigi-po-apache-kafka" />
<div itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="logo" content="https://static.tildacdn.com/tild6537-3734-4838-a361-623264656439/Logo_Slurm.svg" />
<meta itemprop="name" content="Слёрм" />
<meta itemprop="address" content="" />
<meta itemprop="telephone" content="" />
</div>
</div>
<div class="t-feed__post-popup__title-wrapper">
<h1 itemprop="headline" class="js-feed-post-title t-feed__post-popup__title t-title t-title_xxs">Лучшие книги по Apache Kafka</h1>
</div>
<div id="feed-cover" class="r t-feed__post-popup__cover-wrapper t-feed__post-popup__cover-wrapper_aftertitle">
<img itemprop="image" src="https://static.tildacdn.com/tild6237-3161-4464-a432-343065393436/Kafka-books.png" class="js-feed-post-image t-feed__post-popup__img t-img">
</div>
<div id="feed-text" class="r t-feed__post-popup__text-wrapper" data-animationappear="off">
<div itemprop="articleBody" class="js-feed-post-text t-feed__post-popup__text t-text t-text_md"><section>Автор: <a href="https://1900jwatson.medium.com/?source=post_page-----b808f9be43d9-----------------------------------" rel="nofollow"><strong>Джон Л. Уотсон (John L. Watson)</strong></a><br /><a href="https://1900jwatson.medium.com/the-best-books-to-learn-apache-kafka-b808f9be43d9?source=user_profile---------0-------------------------------" rel="nofollow"><strong><u>Оригинал</u></strong></a><br /><br />Apache Kafka вполне законно ассоциируется у нас с <em>событийно-ориентированной</em> архитектурой, б<em>ольшими данными</em>, а еще с <em>микросервисами</em>, от которых сейчас все без ума. Это гибкая платформа с широкими возможностями, поэтому она популярна как для коммерческих, так и для опенсорс-решений. По факту она стала стандартом отрасли и любимым словом рекрутеров, наряду с «фулстеком», «микрофронтендами» и «полиглотом». По <a href="https://www.quora.com/Will-Kafka-be-in-demand" rel="nofollow"><u>некоторым оценкам</u></a><u>,</u> чуть ли не 40% компаний из Fortune 500 используют Kafka. И это, возможно, ещё очень скромные цифры.<br /><br />В этой статье я расскажу, как изучал Apache Kafka и с какими трудностями столкнулся. Я очень надеюсь, что мои наблюдения помогут тем, кто ещё только приступает к знакомству с платформой. Здесь мы обсудим полезные ресурсы, в основном, книги, которые я прочитал, и мой опыт с платформой — до чтения книг и после.<br /><br /><figure contenteditable="false"><hr /></figure><strong>Дисклеймер от Слёрм. Если вы хотите изучить Apache Kafka быстрее и получить обширные знания от экспертов в этой области, Слёрм подготовил курс </strong><a href="https://slurm.io/kafka?utm_source=blog&utm_medium=slurm&utm_campaign=kafka-ops&utm_content=article_27-01-2022&utm_term=books" target="_blank" rel="noreferrer noopener"><strong>Apache Kafka База</strong></a><strong>.</strong><br /><figure contenteditable="false"><hr /></figure><br />Я не претендую на звание эксперта по Kafka. (Было бы здорово, если бы люди чаще себе в таком признавались.) Я много лет использую Kafka и довольно неплохо с ней управляюсь, понимаю её экосистему и инструменты, работал с ней как дев и как опс. Иногда я выступал с презентациями на местных митапах и даже вошёл в топ-10 авторов по Apache Kafka на Quora.<br /><strong> </strong><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild6361-6634-4337-a563-643665323933/1_K5dEyYq5BVfHpCAxy1.png" data-new-tab="false" contenteditable="false"><img src="https://static.tildacdn.com/tild6361-6634-4337-a563-643665323933/1_K5dEyYq5BVfHpCAxy1.png" alt="" /></figure><br />Я примостился на скромном пятом месте среди истинных легенд в мире Kafka: Emil Koutanov, Stéphane Maarek, Hans Jespersen, Jay Kreps, Kai Wähner и Gwen Shapira. До них я, конечно, не дотягиваю, но все равно немножко собой горжусь.<br /><br /><h2 class="t-redactor__h2"><strong>Effective Kafka: A Hands-on Guide to Building Robust and Scalable Event-Driven Applications</strong></h2><strong>Автор: </strong><a href="https://twitter.com/IsTheArchitect" rel="nofollow"><strong><u>Эмиль Кутанов (Emil Koutanov)</u></strong></a><br /><strong> </strong><br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild6261-3737-4636-b830-366362323134/1_0Ey3mO0_IXmFsrtaAX.png" data-new-tab="false" contenteditable="false"><img src="https://static.tildacdn.com/tild6261-3737-4636-b830-366362323134/1_0Ey3mO0_IXmFsrtaAX.png" alt="" /></figure><br />Я начал использовать Kafka в 2017 году, когда это была уже зрелая технология с подробной документацией и кучей статей по теме. Я пошел по проторенному пути — почитал официальную документацию и полагался на Stack Overflow в остальном. Мы делали приложения, которые прекрасно работали... до поры до времени. Иногда мы теряли пару сообщений. Иногда консьюмеры зависали без видимых причин, и это приводило к перебалансировке. А иногда сообщения поступали не по порядку. Так или иначе все было <em>терпимо</em> — как у любого другого опенсорс-проекта. Я думал, у нас всё более или менее под контролем, а если что-то случалось, я винил в этом баг в Kafka или действия ребят из DevOps, обслуживавших Kafka, Spark, Hadoop, Cassandra и другие опенсорс-платформы, которые мы тогда использовали. Все изменилось, когда в 2020 году на Leanpub я увидел неприметную книжицу с хорошей скидкой по акции. В аннотации было сказано, что это книга про архитектуру, распределённые вычисления, модели согласованности, безопасность и т. д. То есть, вроде как, не очередной мануал по Kafka. И стоила она как пара чашек кофе.<br /><br />Представляете? Как оказалось, у автора превосходный слог. Как он владеет языком, как строит предложения, какие слова подбирает! Настоящий литературный шедевр. Не сравнится с тем чтивом, что нам обычно предлагают сегодня специализированные издательства. Почему это так важно? Потому что автору удаётся разъяснять сложные идеи простыми словами. Хороший автор использует язык для выражения своих мыслей, для самовыражения, а не ради славы и денег. Я ценю хорошую литературу и хороший слог, тем более что сам им не владею. Конечно, это субъективное мнение, и вряд ли это хорошая реклама, если вам просто срочно нужно решить какую-то проблему в Kafka.<br /><br /><a href="http://apachekafkabook.com/" rel="nofollow"><u>Effective Kafka: A Hands-on Guide to Building Robust and Scalable Event-Driven Applications</u></a> — это во всех смыслах превосходная книга. В первых главах я ничего особо нового не нашёл, потому что уже был знаком с платформой и это была не первая моя книга про Kafka (об этом позже). Зато с третьей главы стало интересно. Я усомнился в своих знаниях, но и на слово автору верить не собирался. Тогда это была новая книга, без отзывов, и я не знал, насколько автор в теме, так что я закопался в официальные документы и исходный код Kafka. Так-то я и узнал, почему у нас сообщения пропадают. Батчи записей в пуле потоков потреблялись при непрерывном поллинге консьюмера, чтобы поддерживать насыщенность пула. Клиент консьюмера делал для записей офсет, пока они еще были in flight. И все это было написано в книге, чёрным по белому. А мы это пропустили. Мои инвестиции в книгу сразу же многократно окупились.<br /><strong> </strong><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild3137-3165-4538-b863-376538346537/1_GezruupYojM4okwBIv.png" data-new-tab="false" contenteditable="false"><img src="https://static.tildacdn.com/tild3137-3165-4538-b863-376538346537/1_GezruupYojM4okwBIv.png" alt="" /></figure>Я до чтения «Effective Kafka»<br /><br />В десятой главе я сделал ещё одно открытие. Я узнал, почему сообщения публикуются не в том порядке, в каком отправляет их продюсер. Тут проблема была в настройке по умолчанию для свойства <span style="color: rgb(166, 166, 166);">max.in.flight.requests.per.connection</span>, которая разрешала продюсерам менять порядок записей при определённых условиях. Я снова перепроверил всё в официальной документации и нашёл подтверждение — среди описания тысяч других свойств. Если бы не книга, я бы ни за что не нашёл эту иголку в стоге сена. Это один из главных недостатков Kafka лично для меня. Гибкость — это хорошо, конечно, но нужно же разобраться в куче разных параметров и правильно их настроить, иначе они могут серьёзно нарушить работу системы. Если рядом нет эксперта, придётся несколько дней сидеть над свойствами конфигурации клиента и разбираться, какие из них относятся к конкретной проблеме.<br /><br />Я продолжил чтение и к пятнадцатой главе решил оставшуюся часть наших проблем. Внезапно я сам стал экспертом по Kafka.<br /><br />В книге очень много примеров на Java и небольших фрагментов конфигурации. Примеры поддержаны репозиторием GitHub, поэтому писать код не придётся. Все примеры рабочие, я проверял! Если вы не работаете с Java, наверное, примеры можно как-то адаптировать на другие языки, но я не пробовал.<br />Книга подойдёт не только для разработчиков, но и для команды эксплуатации. В ней подробно описана конфигурация и управление кластером, а ещё контейнеризация и безопасность. Часть про безопасность, пожалуй, здесь лучше, чем в любой другой книге.<br /><br />Effective Kafka — это с большим отрывом лучшая книга про Apache Kafka. Она подходит всем — от самых зелёных новичков до тех, кто мнит себя экспертом по теме. (Просто поверьте.) Думаю, лучшее в книге, — это не технические детали, а способ передачи мыслей. Эмиль хорошо разбирается в нескольких областях, и эта книга — кладезь знаний, а не просто источник информации. Мне очень понравились разделы про <em>liveness</em> и <em>safety</em>, хоть я и не сразу понял, причём тут Kafka. Очень даже причём. Иногда мы сами не понимаем, какие знания нам нужны, и они приходят с неожиданной стороны. Погуглите «free ebook on kafka pdf» и обязательно что-нибудь найдёте. Но не факт, что это будет что-то полезное.<br /><br />Я очень рад, что мне попалась такая книга, и безмерно благодарен Эмилю. Во время чтения я вдруг понял, что он мейнтейнер <a href="https://github.com/obsidiandynamics/kafdrop" rel="nofollow"><u>Kafdrop</u></a> — инструмента, который мы уже несколько лет используем в работе. Книга меня так потрясла, что захотелось тут же вылететь из Окленда в Сидней, чтобы встретиться с автором за обедом, но вмешалась пандемия. Надеюсь, у меня получится пообщаться с Эмилем хотя бы онлайн.<br /><br /><h2 class="t-redactor__h2"><strong>Kafka: The Definitive Guide</strong></h2><strong>Авторы: </strong><a href="https://twitter.com/nehanarkhede" rel="nofollow"><strong><u>Неха Наркеде (Neha Narkhede)</u></strong></a><strong>, </strong><a href="https://twitter.com/gwenshap" rel="nofollow"><strong><u>Гвен Шапира (Gwen Shapira)</u></strong></a><strong> и </strong><a href="https://www.linkedin.com/in/toddpalino" rel="nofollow"><strong><u>Тодд Палино (Todd Palino)</u></strong></a><strong>.</strong><br /><br /><a href="https://www.piter.com/collection/all/product/apache-kafka-potokovaya-obrabotka-i-analiz-dannyh"><strong><u>Книга есть на русском</u></strong></a><strong> — прим. пер.</strong><br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild3761-3261-4131-b537-633936653763/1_zaRtsGA_bzxvWMMNxh.jpeg" data-new-tab="false" contenteditable="false"><img src="https://static.tildacdn.com/tild3761-3261-4131-b537-633936653763/1_zaRtsGA_bzxvWMMNxh.jpeg" alt="" /></figure><br /><br />The Definitive Guide — первая книга, которую я прочитал о Kafka. Когда мы переходили с ActiveMQ на Kafka, было много неразберихи, и компания купила несколько экземпляров <em>The Definitive Guide</em>, чтобы помочь нам понять, что к чему. (Но больше для того, чтобы успокоить разработчиков, которые так любят жаловаться на новые технологии, навязанные им сверху.) Хорошо, что мы начали именно с этой книги.<br /><br />В то время большинство разработчиков использовало брокер MQ на JMS, и само понятие стриминга событий было нам чуждо. Нам казалось, что это слишком мудрёная система. <em>Партиции</em>, <em>офсеты</em>, <em>группы консьюмеров</em>,<em> строгая последовательность, at least once delivery</em>… Зачем нужна вся эта ерунда, когда мы годами обходились топиками и очередями? Тогда никто не понимал, чем <em>события</em> отличаются от <em>команд</em>, и хотя событийно-ориентированнаяархитектура не была новинкой, её вряд ли можно было назвать мейнстримом. Тогда большинство микросервисов использовало REST, а крутые ребята баловались с gRPC, Kafka, Kubernetes и монорепозиториями.<br /><br />Kafka не просто платформа. Это конкретное проявление идеологии использования событий. Мне кажется, документация не разъясняет этот момент. Там максимально точно описаны технические детали, но ты недоумеваешь, зачем все это нужно. Это только моё мнение, но мне кажется, что типичный разработчик заглядывает в документацию по Kafka, просто чтобы узнать, как заставить её работать так же, как ActiveMQ. Это совершенно неправильный подход, но так происходит чаще, чем думают мейнтейнеры Kafka. Мне кажется, именно поэтому Kafka разделила всех на два полюса: ее сторонники действительно понимали, зачем нужна строгая последовательность и at least once delivery, а остальные просто искали улучшенную версию RabbitMQ. Если честно, я тоже сначала примкнул к последним.<br /><br />А потом прочёл <a href="https://www.amazon.com/Kafka-Definitive-Real-Time-Stream-Processing/dp/1491936169" rel="nofollow"><u>Kafka: The Definitive Guide</u></a>. Авторы очень доступно объясняют сложные концепции, показывая не только как, но и почему. В книге описывается контекст и проводится разделение между вариантами, где нужна платформа потоковой обработки событий, и сценариями, где лучше подходят очереди сообщений.<br /><br />Помню, сначала подумал, что это будет скорее маркетинг, тем более что два из трёх авторов работали в Confluent. К счастью, я ошибся. Там упоминаются некоторые опенсорс-проекты Confluent, и это объяснимо. Так же было с Kafdrop в <em>Effective Kafka</em>. В целом, написано объективно и беспристрастно. Здесь хорошо объясняются базовые темы, можно читать без подготовки.<br /><br />Сейчас я полагаюсь на <em>Effective Kafka</em> и давно не заглядываю в <em>The Definitive Guide</em>, но для объективности этого обзора перечитал её заново. Мне по-прежнему понравилось. Отличная книга адекватного размера и по адекватной цене. Кстати, <em>The Definitive Guide</em> вышла раньше, чем <em>Effective Kafka</em>.<br /><br />В первых главах <em>The Definitive Guide</em> разъясняются ключевые понятия, а не конкретные детали и примеры. Такой же подход используется в <em>Effective Kafka</em>. У вас есть шанс сначала разобраться, с чем вы имеете дело. Эта книга дает знания, а не инструкции!<br /><br /><h2 class="t-redactor__h2"><strong>Сравнение <em>The Definitive Guide</em> и <em>Effective Kafka</em></strong></h2><br /><ul><li><em>The Definitive Guide</em> описывает технические детали платформы, а <em>Effective Kafka</em> ещё рассказывает об архитектуре и лучших практиках, а также разъясняет некоторые концепции распределённых вычислений.</li><li>В <em>Effective Kafka</em> описаны основные опенсорс-компоненты платформы — Kafka и ZooKeeper. <em>The Definitive Guide</em> также рассказывает о продуктах Confluent, например, <em>Replicator</em> и <em>Schema Registry</em>.</li><li><em>The Definitive Guide</em> гораздо короче, чем <em>Effective Kafka</em> — 280 страниц против 460. Я не знал, что она такая короткая, пока не перечитал. Если это важно, <em>The Definitive Guide</em> вы прочтёте быстрее.</li><li><em>The Definitive Guide</em> подойдёт, скорее, для начального и среднего уровня. <em>Effective Kafka</em> хороша как для новичков, так и для настоящих спецов.</li><li>В <em>Effective Kafka</em> гораздо подробнее описаны топологии развёртывания и сети, включая даже Docker и Kubernetes. <em>The Definitive Guide</em> вышла на три года раньше, чем <em>Effective Kafka</em>. Возможно, поэтому там ничего не сказано о Docker и Kubernetes.</li><li>В обеих книгах достаточно примеров на Java. <em>Effective Kafka</em> описывает больше API продюсеров и консьюмеров и ссылается на репозиторий GitHub.</li><li><em>Effective Kafka</em> описывает больше инструментов — не только CLI, которые поставляются с Kafka, но и сторонние веб-интерфейсы, например, Kafdrop. Что неудивительно, ведь автор — мейнтейнер Kafdrop.</li></ul><br /><em>The Definitive Kafka</em> короче, поэтому в ней меньше информации. Там совсем или почти не описаны некоторые темы, которые рассматриваются в <em>Effective Kafka</em>, например:<br /><br /><ul><li><strong>Статическое членство в группах</strong> — используется, в основном, в деплоях в стиле Kubernetes, где поды быстро появляются и так же быстро исчезают.</li><li><strong>Перебалансировка прослушивателей</strong> — упоминается, но вскользь. <em>Возможно</em>, вам понадобятся эти знания, чтобы правильно реализовать эксклюзивность консьюмеров.</li><li><strong>Транзакции</strong> — книга написана до распространения транзакций Kafka. В <em>Effective Kafka</em> этой теме посвящена целая глава.</li><li><strong>Exactly-once delivery</strong> — упоминается в контексте идемпотентных операций записи, но не раскрыта полностью без обсуждения транзакций.</li><li><strong>Устойчивость к потере данных</strong>, например, повторные попытки, недоставленные сообщения, таймауты и т. д., рассматривается недостаточно подробно. В <em>Effective Kafka</em>, например, сбоям посвящена целая глава. По опыту могу сказать, что в реальным системах с Kafka об этом аспекте часто забывают.</li><li>Про <strong>advertised.listeners</strong> ни слова. Это плохо, ведь о них следует знать каждому уважающему себя разработчику и администратору. Думаю, отчасти это связано с тем, как Kafka обычно развёртывали в 2017 году — на виртуальных машинах или bare metal. Может быть, тогда было не так актуально настраивать несколько прослушивателей, но сейчас всё поменялось. Сегодня большинство разработчиков используют Kafka и ZooKeeper локально с Docker Compose.</li><li><strong>Квоты</strong> упоминаются только в контексте мониторинга. В общей инфраструктуре Kafka в средних и крупных организациях без квот не обойтись. В <em>Effective Kafka</em> квотам посвящена целая глава, и не зря.</li><li><strong>Безопасность</strong> в <em>The Definitive Guide</em> встречается в <em>трех абзацах</em>. Там едва упоминается SASL, главный протокол аутентификации брокера. Сертификаты и списки контроля доступа (ACL) не упоминаются вовсе. В <em>Effective Kafka</em> этой теме уделяется — внимание! – 80 страниц. Представляете? Прямо книга внутри книги. И там только полезная информация.</li><li><strong>Стратегия назначения партиций</strong> в <em>The Definitive Guide</em> рассматривается кратко — только различия между RoundRobinAssignor и RangeAssignor. В <em>Effective Kafka</em> подробно описаны все четыре метода назначения, с примерами и сравнениями.</li></ul><br />В <em>The Definitive Guide</em> тоже есть несколько тем, которые не затрагиваются в <em>Effective Kafka</em>:<br /><br /><ul><li><strong>Сборка мусора:</strong> удивительно, но в <em>The Definitive Guide</em> рассказывается о настройке производительности сборки мусора, а в <em>Effective Kafka</em> — нет. Правда, вместо G1 в больших кучах теперь используется ZGC, но кое-что полезное можно узнать.</li><li>О <strong>мониторинге JMX</strong> в <em>Effective Kafka</em> ничего не говорится. В <em>The Definitive Guide</em> этой теме уделена пара абзацев.</li></ul><br />Есть незначительные отличия в терминологии. Для консьюмеров, которые не связаны с группой консьюмеров, в <em>The Definitive Guide</em> используется термин standalone, а в <em>Effective Kafka</em> — free. Главный цикл, который делает опрос для записей на консьюмере и обрабатывает получившийся батч, называется poll-process loop в <em>Effective Kafka</em> и просто poll loop — в <em>The Definitive Guide</em>.<br /><br />В целом, <em>Effective Kafka</em> может решить почти любые вопросы — не придется обращаться к сторонней документации, блогам, KIP или другим книгам. Официальная документация пригодится для справки, но она не особо нужна. В <em>The Definitive Guide</em>, с другой стороны, даётся общий обзор среднего уровня, а недостающие детали можно найти в официальной документации. Единственное, чего мне не хватает в <em>Effective Kafka,</em> — оглавления.<br /><br />Если сравнивать две книги, видно, сколько усилий было вложено в <em>Effective Kafka</em>. <em>The Definitive Guide</em> хорошая книга, но понемногу устаревает. Было бы здорово, если бы вышло второе издание. В <em>Effective Kafka</em> гораздо больше очень важных деталей. Она подробнее, чем <em>The Definitive Guide</em> и даже официальная документация. Автор говорит, что узнал все это из анализа исходного кода Kafka, истории коммитов и изучения Kafka Improvement Proposals (KIP). Даже не представляю, сколько работы пришлось проделать. Описание архитектуры в <em>Effective Kafka</em> никогда не потеряет актуальности, потому что относится к любой технологии. <em>Effective Kafka</em> станет классикой.<br /><br />Если бы я писал эту статью в 2019 году, то назвал бы <em>The Definitive Guide</em> лучшей книгой о Kafka. Но <em>Effective Kafka</em> и еще пара книг полностью изменили мой взгляд на то, какой должна быть книга. Это невероятный источник мудрости и знаний. При этом <em>The Definitive Guide</em> очень хорошо читается и занимает достойное место на моей книжной полке. Я купил себе домой бумажный экземпляр, хотя у нас их было несколько на работе. Выражаю огромную благодарность авторам за то, что помогли мне познакомиться с этой потрясающей платформой и вложили столько энергии в её создание. У меня есть бумажный экземпляр <em>Effective Kafka</em>, и я надеюсь, что однажды автор его подпишет.<br /><br /><h2 class="t-redactor__h2"><strong>Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems</strong></h2><strong>Автор: </strong><a href="https://twitter.com/martinkl" rel="nofollow"><strong><u>Мартин Клеппман (Martin Kleppmann)</u></strong></a><br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild6562-6134-4061-a362-633437323961/1_OA1gBlJqUZ8NdUCxUv.jpeg" data-new-tab="false" contenteditable="false"><img src="https://static.tildacdn.com/tild6562-6134-4061-a362-633437323961/1_OA1gBlJqUZ8NdUCxUv.jpeg" alt="" /></figure><br />Не удивляйтесь, но третья книга в моем списке вообще не о Kafka. Я уже представил две отличные книги на эту тему, третья была бы лишней. <em>Может быть, на это стоило бы закончить список?</em> Как я уже говорил, иногда мы сами не понимаем, какие знания нам нужны, и они приходят с неожиданной стороны.<br /><br />Зачем проектировать приложения в рамках событийно-ориентированной архитектуры? Какие еще паттерны и принципы стоит рассмотреть? Как добиться согласованности в распределённой системе? Как упорядочивать и хранить данные? Какие сбои нужно предусмотреть? Kafka — это всего один компонент распределённой архитектуры. Недостаточно быть экспертом по Kafka, чтобы ориентироваться в современном сложном мире разработки.<br /><br /><strong>Designing Data-Intensive Applications The big ideas behind reliable, scalable & maintainable systems (Проектирование высоконагруженных приложений. Что помогает обеспечивать надежность, масштабируемость и поддержку систем)</strong><br /><br /><a href="https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable/dp/1449373321" rel="nofollow"><u>Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems</u></a> («Высоконагруженные приложения. Программирование, масштабирование, поддержка») — это ещё один литературный шедевр, который украсит любую книжную полку и долго не потеряет актуальности. В книге рассматриваются три главных принципа проектирования приложений: надежность, масштабируемость и простота поддержки.<br /><br />По названию можно подумать, что это очередная книга о биг дате. Это не так. <em>Designing Data-Intensive Applications</em> — книга об архитектуре распределённых систем. Её единственный недостаток — название, которое вводит в заблуждение. Здесь бы лучше смотрелось что-то вроде «Проектирование надежных и масштабируемых распределённых приложений». Правда, слово data в названии упоминается не зря — зачем нам распределённые системы без данных?<br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild3761-3632-4232-b562-303964356435/1_B0UpnQKvjUX-W_aPjq.jpeg" data-new-tab="false" contenteditable="false"><img src="https://static.tildacdn.com/tild3761-3632-4232-b562-303964356435/1_B0UpnQKvjUX-W_aPjq.jpeg" alt="" /></figure><br />Маленькое примечание: книга не о Kafka, но она там упоминается. Автор не новичок в Kafka — Мартин был senior-разработчиком в LinkedIn (в инкубаторе которого зародилась Kafka), и он один из мейнтейнеров <a href="http://samza.apache.org/" rel="nofollow"><u>Apache Samza</u></a> — фреймворка в стиле <em>MapReduce</em> для распределённой обработки больших потоков событий, где Kafka служит для передачи сообщений.<br /><br />К чему я клоню? Некоторые книги делят нашу жизнь на «до» и «после». Мы отказываемся от прошлых убеждений и обретаем новые. У меня так и было, когда я прочел <em>Designing Data-Intensive Applications</em> в 2018. А потом в 2020, уже с <em>Effective Kafka</em>. У авторов схожий стиль изложения, вплоть до грамматических конструкций. Они используют сноски и примечания, чтобы добавить что-то интересное и забавное, и от этого книги читаются ещё лучше. Они подбирают превосходные аналогии. Я смеялся, когда Эмиль проводил параллель между криминологией XVIII века и презумпцией невиновности с одной стороны и свойствами <em>safety</em> и <em>liveness</em> в распределённых системах — с другой. А <em>миграции схем баз данных</em> он сравнивает с изменением ширины колеи в XIX веке. Мне особенно понравилось, как Мартин вспомнил о мейнфреймах 60-х и 70-х годов, показывая, что история повторяется. Обе книги очень хорошо написаны, нигде не заметно, что глава писалась второпях, в погоне за дедлайнами издателя. Подсознательно я стараюсь копировать этот стиль. И даже не стесняюсь этого.<br /><br />В <em>Designing Data-Intensive Applications</em> Мартину удалось кратко (хоть книга и получилась объемной) изложить свои превосходные исследования. Основные темы книги:<br /><br /><ul><li>Модели данных (реляционные, ключ-значение, граф и т. д.), структуры данных и индексы.</li><li>Модели сохраняемости (B-деревья, LSM).</li><li>Форматы данных (JSON, XML, Avro, Thrift, Protobuf и т. д.). Кстати, Мартин — один из мейнтейнеров Avro.</li><li>Репликация — лидер-фоловер, отставание, репликация с несколькими лидерами, конфликты записи, кворумная репликация.</li><li>Транзакции — уровни изоляции, перекос при чтении и записи, механизмы контроля параллелизма (последовательный, пессимистичный и оптимистичный).</li><li>Сбои в распределённых системах — время и синхронизация часов, византийская ошибка, таймауты и асинхронность.</li><li>Распределённые алгоритмы, модели согласованности, порядок, распределённые транзакции и консенсус.</li><li>Обработка батчей, MapReduce и обработка потоков.</li></ul><br />Глядя на список тем, можно испугаться, что там все очень сложно. Но автору блестяще удается говорить о сложных концепциях простыми словами.<br /><br />Эта книга не научит вас обращаться с Kafka — для этого есть <em>Effective Kafka</em>. И её определённо нельзя прочитать за один присест. Читайте вдумчиво, не торопясь. Эта книга изменит ваш взгляд на распределённые системы и подход к работе. Сколько заблуждений у меня было, пока я не прочёл книгу Мартина! Вот некоторые из не самых постыдных:<br /><br /><ul><li>Я думал, что ACID подходит только для реляционных баз данных, хотя я достаточно хорошо понимал этот подход и почти всегда правильно выбирал уровни изоляции. На самом деле, ACID подходит для любой системы, которая обрабатывает данные, и особенно важен для распределённых систем.</li><li>Я слышал о моделях согласованности только в контексте <em>итоговой согласованности</em> и думал, что она бывает сильная и слабая, и все. Я и не представлял, какой разной бывает согласованность, и не только по шкале «сильная-слабая». В некоторых моделях возникают разные побочные эффекты, которые даже не влияют на силу и слабость.</li><li>Я всегда связывал распределённые системы с микросервисами и считал их шагом вперед по сравнению с монолитами. Я не думал о том, как сложно устранять сбои, если упала только часть системы. Просто подожди и попробуй снова. Что тут сложного?</li></ul><br />Знания, которые дает <em>Designing Data-Intensive Applications</em>, никогда не устареют. Это шедевр технической литературы, который станет классикой.<br /><br /><h2 class="t-redactor__h2"><strong>Что еще почитать про Apache Kafka?</strong></h2><br />Я, конечно, читал и другие книги о Kafka. Могу ли я ещё что-то порекомендовать. Извините, но нет.<br /><br />Не хочу говорить ничего плохого об авторах, ведь написание книги требует огромных усилий, даже если книга потом не оправдала ожидания читателей. Я прочёл много книг о популярных опенсорс-технологиях, в основном, издательств Safari, Manning и Packt, и выделил для себя два типа авторов. Первые прекрасно разбираются в теме, очень увлечены ей и жаждут поделиться знаниями. Они уже признанные эксперты, им не нужно писать книгу, чтобы это доказывать. Второй тип — «карьеристы». Они неплохо разбираются в теме, но книга им нужна для статуса и строчки в резюме.<br /><br />Делать карьеру — это хорошо, если только ты не пытаешься выманить у аудитории побольше денег. К сожалению, на Amazon можно найти парочку таких авторов. Не буду называть имен, но вы сразу распознаете их по ужасным отзывам. Например, таким:<br /><em>Это не книга, а просто компиляция статей из блогов. Она не представляет никакой ценности, все это можно найти в бесплатных документах по Apache Kafka. Полный провал. Не советую читать даже бесплатно.</em><br /><br />Полностью согласен! Я почувствовал то же самое. Сложно поверить, что кто-то пишет такое всерьез. Вот <em>реальный</em> дословный отрывок:<br /><br /><em>Для запуска кластеров Hadoop и Storm вам понадобятся технологии работы с большими данными, например Hadoop и Storm.</em><br /><br />Для Hadoop нужен Hadoop? Да ладно? В общем, прежде чем купить книгу, убедитесь, что автор разбирается в теме и реально работает с проектами. Кроме книг, о которых я рассказал, я ничего достойного больше не находил. Если вам что-то попадётся, пишите!<br /><br />В целом, можно начать работу с Kafka, изучив официальную документацию и почитав популярные блоги. Но учтите: Kafka — комплексная платформа со множеством вариантов использования и тысячами вариантов конфигурации. Разобраться во всем этом настолько сложно, что даже опытные специалисты по Kafka, бывает, ошибаются. Мне ли не знать. Блоги обычно пишут люди, которые разбираются в теме чуть больше, чем обычный человек. Они не всегда правы. Говорю по своему опыту. Официальная документация полезна для справки, но точно не как источник мудрости.<br /><br /><figure contenteditable="false"><hr /></figure><strong>Чтобы совершать меньше ошибок, начиная работать с Apache Kafka, приходите на курс Слёрма </strong><a href="https://slurm.io/kafka?utm_source=blog&utm_medium=slurm&utm_campaign=kafka-ops&utm_content=article_27-01-2022&utm_term=books"><strong><u>Apache Kafka База</u></strong></a><strong>.</strong><br /><figure contenteditable="false"><hr /></figure><br />Если мы хотим чего-то добиться, нужно вкладывать в обучение. <em>Умный человек учится на своих ошибках, а мудрый — на чужих.</em> Советую почитать книги, о которых я рассказал. Они определённо помогут вам развиваться в профессиональном плане.<br /><br /><br /></section></div>
</div>
<div class="t-feed__post-popup__date-parts-wrapper t-feed__post-popup__date-parts-wrapper_aftertext">
<span class="t-feed__post-popup__date-wrapper">
<span class="js-feed-post-date t-feed__post-popup__date t-uptitle t-uptitle_sm">2022-01-27 16:00</span>
</span>
<a href="https://slurm.io/blog#!/tfeeds/784947206928/c/Apache Kafka" class="t-feed__post-popup__tag"><span class="t-uptitle t-uptitle_xs" itemprop="about">Apache Kafka</span></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<style type="text/css">
#rec560736642 .t-feed__post-popup__cover-wrapper .t-slds__bullet_active .t-slds__bullet_body,
#rec560736642 .t-feed__post-popup__cover-wrapper .t-slds__bullet:hover .t-slds__bullet_body {
background-color: #222 !important;
}
#rec560736642 .t-feed__post-popup__arrow-top {
position:fixed;
z-index:1;
bottom:20px;
left: 20px;
min-height:30px;
}
#rec560736642 .t-feed__post-popup__arrow-top svg path {
}
</style>
<script type="text/javascript">
$(document).ready(function(){
$('body').append('<script type="text\/javascript" src="https:\/\/static.tildacdn.com\/js\/ya-share.js" async="async" charset="utf-8"><\/script>');
var popup = $('.t-feed__post-popup');
t_onFuncLoad('t_feed_openShare', function () {
t_feed_openShare(popup);
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
window.tFeedPosts = {};
var recid = '560736642';
var opts = {
"feeduid": "784947206928",
"previewmode": "yes",
"align": "left",
"amountOfPosts": "",
"reverse": "desc",
"blocksInRow": "3",
"blocksClass": "t-feed__grid-col t-col t-col_4",
"blocksWidth": "360",
"colClass": "",
"prefixClass": "",
"vindent": "",
"dateFormat": "4",
"timeFormat": "",
"imageRatio": "75",
"hasOriginalAspectRatio": false,
"imageHeight": "",
"imageWidth": "",
"dateFilter": 'all',
"showPartAll": true,
"showImage": true,
"showShortDescr": true,
"showParts": false,
"showDate": false,
"hideFeedParts": false,
"parts_opts": {
"partsBgColor": "#ffffff",
"partsBorderSize": "1px",
"partsBorderColor": "#000000",
"align": "center"
},
"btnsAlign": false,
"colWithBg": {
"paddingSize": "",
"background": "",
"borderRadius": "",
"shadowSize": "",
"shadowOpacity": "",
"shadowSizeHover": "",
"shadowOpacityHover": "",
"shadowShiftyHover": ""
},
"separator": {
"height": "",
"color": "",
"opacity": "",
"hideSeparator": false
},
"btnAllPosts": {
"text": "",
"link": "",
"target": ""
},
"popup_opts": {
"popupBgColor": "#ffffff",
"overlayBgColorRgba": "rgba(255,255,255,1)",
"closeText": "",
"iconColor": "#000000",
"popupStat": "",
"titleColor": "",
"textColor": "",
"subtitleColor": "",
"datePos": "aftertext",
"partsPos": "aftertext",
"imagePos": "aftertitle",
"inTwoColumns": false,
"zoom": false,
"styleRelevants": "",
"methodRelevants": "random",
"titleRelevants": "",
"showRelevants": "",
"titleFontFamily": "",
"descrFontFamily": "",
"subtitleFontFamily": "",
"shareStyle": "t-feed__share_black-white",
"shareBg": "",
"isShare": false,
"shareServices": "",
"shareFBToken": "",
"showDate": false,
"bgSize": "cover"
},
"arrowtop_opts": {
"isShow": false,
"style": "",
"color": "",
"bottom": "",
"left": "",
"right": ""
},
"gallery": {
"control": "",
"arrowSize": "",
"arrowBorderSize": "",
"arrowColor": "",
"arrowColorHover": "",
"arrowBg": "",
"arrowBgHover": "",
"arrowBgOpacity": "",
"arrowBgOpacityHover": "",
"showBorder": "",
"dotsWidth": "",
"dotsBg": "",
"dotsActiveBg": "",
"dotsBorderSize": ""
},
"typo": {
"title": "color:#000000;font-family:'TildaSans';",
"descr": "font-family:'TildaSans';",
"subtitle": "font-family:'TildaSans';"
},
"amountOfSymbols": "",
"bbtnStyle": "color:#ffffff;background-color:#000000;border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px;",
"btnStyle": "color:#000000;border:1px solid #000000;background-color:#ffffff;border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px;",
"btnTextColor": "#000000",
"btnType": "",
"btnSize": "sm",
"btnText": "",
"btnReadMore": "",
"isHorizOnMob": false,
"itemsAnim": "",
"datePosPs": "beforetitle",
"partsPosPs": "beforetitle",
"imagePosPs": "beforetitle",
"datePos": "afterdescr",
"partsPos": "onimage",
"imagePos": "beforetitle"
};
var post = {
uid: 'm45fr2d1n1',
date: '2022-01-27 16:00',
mediatype: 'image',
mediadata: 'https://static.tildacdn.com/tild6237-3161-4464-a432-343065393436/Kafka-books.png',
postparts: [{"partuid":"246382447981","parttitle":"Apache Kafka","parturl":"https:\/\/slurm.io\/blog#!\/tfeeds\/784947206928\/c\/Apache Kafka"}]
};
t_onFuncLoad('t_feed_PostInit', function() {
t_feed_PostInit(recid, opts, post);
});
t_onFuncLoad('t_feed__drawPostPopupVideo', function() {
var postVideoHtml = t_feed__drawPostPopupVideo(post);
$('.js-feed-cover-video').html(postVideoHtml);
});
t_feed_formateDate_snippet('2022-01-27 16:00'); // todo: t_feed_formateDate(date, opts, recid)
if ($('.t-feed__post-popup__text-wrapper').hasClass('t-feed__post-popup__text-wrapper_zoom')) {
t_onFuncLoad('t_feed_addZoom', function () {
t_feed_addZoom();
});
}
var arrowTop = $('.t-feed__post-popup__arrow-top');
var popup = $('.t-feed__post-popup');
popup.scroll(function() {
t_onFuncLoad('t_feed_addPostPopupArrowTop', function () {
t_feed_addPostPopupArrowTop($(this), arrowTop);
});
});
arrowTop.on('click', function() {
popup.animate({scrollTop: 0}, 300);
});
t_onFuncLoad('t_feed_getCountOfViews', function () {
t_feed_getCountOfViews($('.t-feed__post-popup'));
});
if ($('.js-feed-relevants').length > 0) {
t_onFuncLoad('t_feed_addRelevantsPosts', function () {
t_feed_addRelevantsPosts(recid, opts, post, post.uid);
});
}
var bgColor = '#ffffff';
bgColor = bgColor ? bgColor.replace('1)', '0.9)') : '';
$('.t-feed__post-popup__close-wrapper').css('background-color', bgColor);
});
function t_feed_drawParts_snippet(parts) {
var tagsHTML = '';
parts.split(',').forEach(function(item) {
tagsHTML += '<span class="t-uptitle t-uptitle_xs">' + item + '</span>';
});
$('.js-feed-post-tags').html(tagsHTML);
}
function t_feed_formateDate_snippet(date) {
var dayDate = date.split(' ')[0];
var timeDate = date.split(' ')[1];
var dateParts = dayDate.split('-');
var newDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);
var time = +'' == 1? ' ' + timeDate : '';
var newMonth = newDate.getMonth();
var day = dateParts[2];
var month = dateParts[1];
var year = dateParts[0];
var newDate = '';
var monthArr = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];
var monthTitle = t_feed_getDictionary_snippet(monthArr[newMonth]);
switch (+'4') {
case 1:
newDate = month + '-' + day + '-' + year + time;
break;
case 2:
newDate = day + '-' + month + '-' + year + time;
break;
case 3:
newDate = day + '/' + month + '/' + year + time;
break;
case 4:
newDate = day + '.' + month + '.' + year + time;
break;
case 5:
newDate = monthTitle[0] + ' ' + day + ', ' + year + time;
break;
case 6:
newDate = day + ' ' + monthTitle[1] + ' ' + year + time;
break;
default:
newDate = t_feed_addDefaultDate_snippet(dateParts, date, monthTitle, time);
break;
}
$('.js-feed-post-date').html(newDate);
}
function t_feed_addDefaultDate_snippet(dateParts, date, monthTitle, time) {
var lang = t_feed_returnLang_snippet();
var currentDate = new Date();
var postDateMs = Date.parse(date);
var diffDate = currentDate - postDateMs;
var days = Math.floor(diffDate / (60 * 60 * 1000 * 24));
var agoTitle = t_feed_getDictionary_snippet('ago');
var daysTitle = (lang == 'RU' || lang == 'UK') && (days > 4) ? t_feed_getDictionary_snippet('days')[1] : t_feed_getDictionary_snippet('days')[0];
var currentYear = currentDate.getFullYear();
var postYear = +date.split('-')[0];
var agoTitleSeparator = (lang == 'JA' || lang == 'CN') ? '' : ' ';
var year = postYear != currentYear ? postYear : '';
var defaultDate = '';
if (days == 0) {
defaultDate = t_feed_getDictionary_snippet('today');
}
if (days == 1) {
defaultDate = t_feed_getDictionary_snippet('yesterday');
}
if (days > 1 && days < 15) {
if (lang == 'FR' || lang == 'DE' || lang == 'ES' || lang == 'PT') {
defaultDate = agoTitle + agoTitleSeparator + days + agoTitleSeparator + daysTitle;
} else {
defaultDate = days + agoTitleSeparator + daysTitle + agoTitleSeparator + agoTitle;
}
}
if (days >= 15 || postYear > currentYear) {
defaultDate = t_feed_addFullDate_snippet(lang, dateParts[2], monthTitle, year) + time;
}
return defaultDate;
}
function t_feed_addFullDate_snippet(lang, day, month, year) {
var monthSeparator = lang == 'DE' ? '. ' : ' ';
var datePartSeparator = ' ';
if (lang == 'EN') {
datePartSeparator = year != '' ? ', ' : '';
} else if (lang == 'ES' || lang == 'PT') {
datePartSeparator = year != '' ? ' de ' : '';
}
var monthTitle = month[1];
if (lang == 'EN' || lang == 'DE') {
monthTitle = month[0];
}
if (lang == 'EN') {
return monthTitle + ' ' + day + datePartSeparator + year;
} else if (lang == 'JA' || lang == 'CN') {
return year + monthTitle + day;
} else {
return day + monthSeparator + monthTitle + datePartSeparator + year;
}
}
function t_feed_getDictionary_snippet(msg) {
var dict = [];
dict['seealso'] = {
EN: 'See also',
RU: 'Смотрите также',
FR: 'Voir également',
DE: 'Siehe auch',
ES: 'Ver también',
PT: 'Veja também',
UK: 'Дивись також',
JA: 'また見なさい',
CN: '也可以看看'
};
dict['today'] = {
EN: 'Today',
RU: 'Сегодня',
FR: 'Aujourd\'hui',
DE: 'Heute',
ES: 'Hoy',
PT: 'Hoje',
UK: 'Сьогодні',
JA: '今日',
CN: '今天'
};
dict['yesterday'] = {
EN: 'Yesterday',
RU: 'Вчера',
FR: 'Hier',
DE: 'Gestern',
ES: 'Ayer',
PT: 'Ontem',
UK: 'Вчора',
JA: '昨日',
CN: '昨天'
};
dict['days'] = {
EN: ['days'],
RU: ['дня', 'дней'],
FR: ['jours'],
DE: ['tagen'],
ES: ['dias'],
PT: ['dias'],
UK: ['дні', 'днів'],
JA: ['日'],
CN: ['天']
};
dict['ago'] = {
EN: 'ago',
RU: 'назад',
FR: 'Il y a',
DE: 'Vor',
ES: 'Hace',
PT: 'Há',
UK: 'тому',
JA: '前',
CN: '前'
};
dict['january'] = {
EN: ['January', 'january'],
RU: ['Январь', 'января'],
FR: ['Janvier', 'janvier'],
DE: ['Januar', 'januar'],
ES: ['Enero', 'de enero'],
PT: ['Janeiro', 'de janeiro'],
UK: ['Січень', 'січня'],
JA: ['一月', '一月'],
CN: ['一月', '一月']
};
dict['february'] = {
EN: ['February', 'february'],
RU: ['Февраль', 'февраля'],
FR: ['Février', 'février'],
DE: ['Februar', 'februar'],
ES: ['Febrero', 'de febrero'],
PT: ['Fevereiro', 'de fevereiro'],
UK: ['Лютий', 'лютого'],
JA: ['二月', '二月'],
CN: ['二月', '二月']
};
dict['march'] = {
EN: ['March', 'March'],
RU: ['Март', 'марта'],
FR: ['Mars', 'mars'],
DE: ['März', 'märz'],
ES: ['Marzo', 'de marzo'],
PT: ['Março', 'de março'],
UK: ['Березень', 'березня'],
JA: ['三月', '三月'],
CN: ['三月', '三月']
};
dict['april'] = {
EN: ['April', 'april'],
RU: ['Апрель', 'апреля'],
FR: ['Avril', 'avril'],
DE: ['April', 'april'],
ES: ['Abril', 'de abril'],
PT: ['Abril', 'de abril'],
UK: ['Квітень', 'квітня'],
JA: ['四月', '四月'],
CN: ['四月', '四月']
};
dict['may'] = {
EN: ['May', 'may'],
RU: ['Май', 'мая'],
FR: ['Mai', 'mai'],
DE: ['Kann', 'kann'],
ES: ['Mayo', 'de mayo'],
PT: ['Maio', 'de maio'],
UK: ['Травень', 'травня'],
JA: ['五月', '五月'],
CN: ['五月', '五月']
};
dict['june'] = {
EN: ['June', 'june'],
RU: ['Июнь', 'июня'],
FR: ['Juin', 'juin'],
DE: ['Juni', 'juni'],
ES: ['Junio', 'de junio'],
PT: ['Junho', 'de junho'],
UK: ['Червень', 'червня'],
JA: ['六月', '六月'],
CN: ['六月', '六月']
};
dict['july'] = {
EN: ['July', 'july'],
RU: ['Июль', 'июля'],
FR: ['Juillet', 'juillet'],
DE: ['Juli', 'Juli'],
ES: ['Julio', 'de julio'],
PT: ['Julho', 'de julho'],
UK: ['Липень', 'липня'],
JA: ['七月', '七月'],
CN: ['七月', '七月']
};
dict['august'] = {
EN: ['August', 'august'],
RU: ['Август', 'августа'],
FR: ['Août', 'août'],
DE: ['August', 'august'],
ES: ['Agosto', 'de agosto'],
PT: ['Agosto', 'de agosto'],
UK: ['Серпень', 'серпня'],
JA: ['八月', '八月'],
CN: ['八月', '八月']
};
dict['september'] = {
EN: ['September', 'september'],
RU: ['Сентябрь', 'сентября'],
FR: ['Septembre', 'septembre'],
DE: ['September', 'september'],
ES: ['Septiembre', 'de septiembre'],
PT: ['Setembro', 'de setembro'],
UK: ['Вересень', 'вересня'],
JA: ['九月', '九月'],
CN: ['九月', '九月']
};
dict['october'] = {
EN: ['October', 'october'],
RU: ['Октябрь', 'октября'],
FR: ['Octobre', 'octobre'],
DE: ['Oktober', 'oktober'],
ES: ['Octubre', 'de octubre'],
PT: ['Outubro', 'de outubro'],
UK: ['Жовтень', 'жовтня'],
JA: ['十月', '十月'],
CN: ['十月', '十月']
};
dict['november'] = {
EN: ['November', 'november'],
RU: ['Ноябрь', 'ноября'],
FR: ['Novembre', 'novembre'],
DE: ['November', 'november'],
ES: ['Noviembre', 'de noviembre'],
PT: ['Novembro', 'de novembro'],
UK: ['Листопад', 'листопада'],
JA: ['十一月', '十一月'],
CN: ['十一月', '十一月']
};
dict['december'] = {
EN: ['December', 'december'],
RU: ['Декабрь', 'декабря'],
FR: ['Décembre', 'décembre'],
DE: ['Dezember', 'dezember'],
ES: ['Diciembre', 'de diciembre'],
PT: ['Dezembro', 'de dezembro'],
UK: ['Грудень', 'грудня'],
JA: ['十二月', '十二月'],
CN: ['十二月', '十二月']
};
var lang = t_feed_returnLang_snippet();
if (typeof dict[msg] != 'undefined') {
if (typeof dict[msg][lang] != 'undefined' && dict[msg][lang] != '') {
return dict[msg][lang];
} else {
return dict[msg]['EN'];
}
}
}
function t_feed_returnLang_snippet() {
t_feed_defineUserLang_snippet();
var customLang = '';
var lang = 'EN';
if (typeof customLang != 'undefined' && customLang != '') {
lang = customLang.toUpperCase();
} else {
lang = window.tildaBrowserLang;
}
return lang;
}
function t_feed_defineUserLang_snippet() {
window.tildaBrowserLang = window.navigator.userLanguage || window.navigator.language;
window.tildaBrowserLang = window.tildaBrowserLang.toUpperCase();
if (window.tildaBrowserLang.indexOf('RU') != -1) {
window.tildaBrowserLang = 'RU';
} else if (window.tildaBrowserLang.indexOf('FR') != -1) {
window.tildaBrowserLang = 'FR';
} else if (window.tildaBrowserLang.indexOf('DE') != -1) {
window.tildaBrowserLang = 'DE';
} else if (window.tildaBrowserLang.indexOf('ES') != -1) {
window.tildaBrowserLang = 'ES';
} else if (window.tildaBrowserLang.indexOf('PT') != -1) {
window.tildaBrowserLang = 'PT';
} else if (window.tildaBrowserLang.indexOf('UK') != -1) {
window.tildaBrowserLang = 'UK';
} else if (window.tildaBrowserLang.indexOf('JA') != -1) {
window.tildaBrowserLang = 'JA';
} else if (window.tildaBrowserLang.indexOf('CN') != -1) {
window.tildaBrowserLang = 'CN';
} else {
window.tildaBrowserLang = 'EN';
}
}
</script>
<!--footer-->
<div id="t-footer" class="t-records" data-hook="blocks-collection-content-node" data-tilda-project-id="705564" data-tilda-page-id="13176281" data-tilda-page-alias="footer" data-tilda-formskey="59b517bfad01153865a4875be1bdd366" data-tilda-stat-scroll="yes" data-tilda-lazy="yes" data-tilda-root-zone="one" data-tilda-project-headcode="yes" data-tilda-ts="y" data-tilda-project-country="RU">
<div id="rec1684307921" class="r t-rec" style=" " data-animationappear="off" data-record-type="131" >
<!-- T123 -->
<div class="t123" >
<div class="t-container_100 ">
<div class="t-width t-width_100 ">
<!-- nominify begin -->
<script>
$('.example-3 .tn-atom').on('click', function () {
var $temp = $('<input>');
$('body').append($temp);
$temp.val($(this).text()).select();
document.execCommand('copy');
$temp.remove();
$(this).text('Скопирован!');
});
</script>
<style>
.example-3 { cursor: pointer; }
</style>
<!-- nominify end -->
</div>
</div>
</div>
</div>
<div id="rec480081308" class="r t-rec uc-cookie-block" style=" " data-animationappear="off" data-record-type="121" data-alias-record-type="886" >
<!-- T886 -->
<div class="t886 t886_closed" data-storage-item="t886cookiename_705564" style="">
<div class="t886__wrapper" style="background-color:#ffffff; width:800px;">
<div class="t886__text t-text t-text_xs t-valign_middle" field="text">На сайте мы используем cookie. Без них несладко.</div>
<div
class="t-btn t-btnflex t-btnflex_type_button t-btnflex_sm t886__btn"
type="button"
><span class="t-btnflex__text">Хорошо</span>
<style>#rec480081308 .t-btnflex.t-btnflex_type_button {color:#ffffff;background-color:#000000;--border-width:0px;border-style:none !important;border-radius:5px;box-shadow:none !important;font-weight:400;transition-duration:0.2s;transition-property: background-color, color, border-color, box-shadow, opacity, transform, gap;transition-timing-function: ease-in-out;}@media (hover: hover) {#rec480081308 .t-btnflex.t-btnflex_type_button:not(.t-animate_no-hover):hover {color:#ffffff !important;background-color:#170f63 !important;}#rec480081308 .t-btnflex.t-btnflex_type_button:not(.t-animate_no-hover):focus-visible {color:#ffffff !important;background-color:#170f63 !important;}}</style></div>
</div>
</div>
<script type="text/javascript">
t_onReady(function () {
t_onFuncLoad('t886_init', function () {
t886_init('480081308');
});
});
</script>
<style>
#rec480081308 .t886__text {
text-align: left;
}
</style>
<style> #rec480081308 .t886__text { font-size: 14px; line-height: 1; color: #000000; }</style>
<style> #rec480081308 .t886__wrapper { border-radius:5px; }</style>
</div>
<div id="rec495453579" class="r t-rec uc-footer--type0" style=" " data-animationappear="off" data-record-type="121" data-alias-record-type="396" >
<!-- T396 -->
<style>#rec495453579 .t396__artboard {height: 847px; background-color: #ffffff; }#rec495453579 .t396__filter {height: 847px; }#rec495453579 .t396__carrier{height: 847px;background-position: center center;background-attachment: scroll;background-size: cover;background-repeat: no-repeat;}@media screen and (max-width: 1199px) {#rec495453579 .t396__artboard,#rec495453579 .t396__filter,#rec495453579 .t396__carrier {height: 840px;}#rec495453579 .t396__filter {}#rec495453579 .t396__carrier {background-attachment: scroll;}}@media screen and (max-width: 959px) {#rec495453579 .t396__artboard,#rec495453579 .t396__filter,#rec495453579 .t396__carrier {height: 1196px;}#rec495453579 .t396__filter {}#rec495453579 .t396__carrier {background-attachment: scroll;}}@media screen and (max-width: 639px) {#rec495453579 .t396__artboard,#rec495453579 .t396__filter,#rec495453579 .t396__carrier {height: 1513px;}#rec495453579 .t396__filter {}#rec495453579 .t396__carrier {background-attachment: scroll;}}@media screen and (max-width: 479px) {#rec495453579 .t396__artboard,#rec495453579 .t396__filter,#rec495453579 .t396__carrier {height: 1536px;}#rec495453579 .t396__filter {}#rec495453579 .t396__carrier {background-attachment: scroll;}}#rec495453579 .tn-elem[data-elem-id="1712236782477"] {
z-index: 3;
top: 74px;;
left: calc(50% - 600px + 20px);;
width: 105px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1712236782477"] .tn-atom {
border-radius: 0px 0px 0px 0px;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
#rec495453579 .tn-elem[data-elem-id="1712236782477"] .tn-atom__img {
border-radius: 0px 0px 0px 0px;
object-position: center center;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1712236782477"] {
display: table;
left: calc(50% - 480px + 36px);;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1712236782477"] {
display: table;
top: 61px;;
left: calc(50% - 320px + 24px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1712236782477"] {
display: table;
top: 40pxpx;;
left: calc(50% - 240px + 15px);;
width: 105px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1712236782477"] {
display: table;
top: 36px;;
left: calc(50% - 160px + 7px);;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1712235605947"] {
z-index: 3;
top: 74px;;
left: calc(50% - 600px + 20px);;
width: 105px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1712235605947"] .tn-atom {
border-radius: 0px 0px 0px 0px;
opacity: 0;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
#rec495453579 .tn-elem[data-elem-id="1712235605947"] .tn-atom__img {
border-radius: 0px 0px 0px 0px;
object-position: center center;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1712235605947"] {
display: table;
left: calc(50% - 480px + 36px);;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1712235605947"] {
display: table;
top: 61px;;
left: calc(50% - 320px + 24px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1712235605947"] {
display: table;
top: 40px;;
left: calc(50% - 240px + 15px);;
width: 105px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1712235605947"] {
display: table;
top: 36px;;
left: calc(50% - 160px + 7px);;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1712235605947"] .tn-atom {
background-size: cover;
opacity: 0;
}
}#rec495453579 .tn-elem[data-elem-id="1692506348245"] {
z-index: 3;
top: 58px;;
left: calc(50% - 600px + 820px);;
width: 120px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1692506348245"] .tn-atom {
border-radius: 0px 0px 0px 0px;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
#rec495453579 .tn-elem[data-elem-id="1692506348245"] .tn-atom__img {
border-radius: 0px 0px 0px 0px;
object-position: center center;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1692506348245"] {
display: table;
left: calc(50% - 480px + 640px);;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1692506348245"] {
display: table;
top: 755px;;
left: calc(50% - 320px + 24px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1692506348245"] {
display: table;
top: 835px;;
left: calc(50% - 240px + 20px);;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1692506348245"] {
display: table;
top: 863px;;
left: calc(50% - 160px + 10px);;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1692506631214"] {
z-index: 3;
top: 58px;;
left: calc(50% - 600px + 820px);;
width: 120px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1692506631214"] .tn-atom {
border-radius: 0px 0px 0px 0px;
opacity: 0;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
#rec495453579 .tn-elem[data-elem-id="1692506631214"] .tn-atom__img {
border-radius: 0px 0px 0px 0px;
object-position: center center;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1692506631214"] {
display: table;
left: calc(50% - 480px + 640px);;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1692506631214"] {
display: table;
top: 757px;;
left: calc(50% - 320px + 24px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1692506631214"] {
display: table;
top: 845px;;
left: calc(50% - 240px + 20px);;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1692506631214"] {
display: table;
top: 873px;;
left: calc(50% - 160px + 10px);;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327289504"] {
color: #8999a9;
z-index: 3;
top: 121px;;
left: calc(50% - 600px + 20px);;
width: 360px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327289504"] .tn-atom {
vertical-align: middle;
color: #8999a9;
font-size: 18px;
font-family: var(--t-text-font,Arial);
line-height: 1.33;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327289504"] {
display: table;
left: calc(50% - 480px + 32px);;
width: 288px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327289504"] {
display: table;
top: 68px;;
left: calc(50% - 320px + 153px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327289504"] {
display: table;
top: 81px;;
left: calc(50% - 240px + 20px);;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327289504"] {
display: table;
left: calc(50% - 160px + 10px);;
width: 300px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327289504"] .tn-atom {
font-size: 16px;
line-height: 1.5;
background-size: cover;
}
}#rec495453579 .tn-elem[data-elem-id="1660327420094"] {
color: #172b4d;
z-index: 3;
top: 185px;;
left: calc(50% - 600px + 14px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327420094"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 24px;
font-family: var(--t-text-font,Arial);
line-height: 1.08;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327420094"] {
display: table;
left: calc(50% - 480px + 27px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327420094"] {
display: table;
top: 124px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327420094"] {
display: table;
left: calc(50% - 240px + 15px);;
width: 440px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327420094"] {
display: table;
left: calc(50% - 160px + 5px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327526179"] {
color: #172b4d;
z-index: 3;
top: 223px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327526179"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 24px;
font-family: var(--t-text-font,Arial);
line-height: 1.08;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327526179"] {
display: table;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327526179"] {
display: table;
top: 162px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327526179"] {
display: table;
left: calc(50% - 240px + 16px);;
width: 440px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327526179"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328247771"] {
color: #172b4d;
z-index: 3;
top: 547px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328247771"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328247771"] {
display: table;
top: 557px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328247771"] {
display: table;
top: 532px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328247771"] {
display: table;
top: 622px;;
left: calc(50% - 240px + 16px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328247771"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328247771"] {
display: table;
top: 614px;;
left: calc(50% - 160px + 6px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328067115"] {
color: #172b4d;
z-index: 3;
top: 217px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067115"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328067115"] {
display: table;
top: 219px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328067115"] {
display: table;
top: 158px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328067115"] {
display: table;
top: 258px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067115"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328067115"] {
display: table;
top: 258px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328673693"] {
color: #172b4d;
z-index: 3;
top: 229px;;
left: calc(50% - 600px + 816px);;
width: 360px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328673693"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328673693"] {
display: table;
top: 229px;;
left: calc(50% - 480px + 636px);;
width: 288px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328673693"] {
display: table;
top: 874px;;
left: calc(50% - 320px + 20px);;
width: 256px;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328673693"] {
display: table;
top: 1008px;;
left: calc(50% - 240px + 20px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328673693"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328673693"] {
display: table;
top: 1017px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327820270"] {
color: #172b4d;
z-index: 3;
top: 305px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327820270"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327820270"] {
display: table;
top: 315px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327820270"] {
display: table;
top: 246px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327820270"] {
display: table;
top: 258px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327820270"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327820270"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660728009618"] {
color: #172b4d;
z-index: 3;
top: 273px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660728009618"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660728009618"] {
display: table;
top: 281px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660728009618"] {
display: table;
top: 212px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660728009618"] {
display: table;
top: 220px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660728009618"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660728009618"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660728533851"] {
color: #ff8888;
z-index: 3;
top: 274px;;
left: calc(50% - 600px + 8px);;
width: 9px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660728533851"] .tn-atom {
vertical-align: middle;
color: #ff8888;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660728533851"] {
display: table;
top: 283px;;
left: calc(50% - 480px + 20px);;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660728533851"] {
display: table;
top: 211px;;
left: calc(50% - 320px + 10px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660728533851"] {
display: table;
top: 222px;;
left: calc(50% - 240px + 8px);;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660728533851"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660728533851"] {
display: table;
top: 218px;;
left: calc(50% - 160px + 0px);;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328247775"] {
color: #172b4d;
z-index: 3;
top: 579px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328247775"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328247775"] {
display: table;
top: 591px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328247775"] {
display: table;
top: 566px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328247775"] {
display: table;
top: 660px;;
left: calc(50% - 240px + 16px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328247775"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328247775"] {
display: table;
top: 652px;;
left: calc(50% - 160px + 6px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328067118"] {
color: #172b4d;
z-index: 3;
top: 185px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067118"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328067118"] {
display: table;
top: 185px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328067118"] {
display: table;
top: 124px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328067118"] {
display: table;
top: 220px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067118"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328067118"] {
display: table;
top: 220px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328247777"] {
color: #172b4d;
z-index: 3;
top: 611px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328247777"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328247777"] {
display: table;
top: 625px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328247777"] {
display: table;
top: 600px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328247777"] {
display: table;
top: 698px;;
left: calc(50% - 240px + 16px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328247777"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328247777"] {
display: table;
top: 690px;;
left: calc(50% - 160px + 6px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328067120"] {
color: #172b4d;
z-index: 3;
top: 249px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067120"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328067120"] {
display: table;
top: 253px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328067120"] {
display: table;
top: 192px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328067120"] {
display: table;
top: 296px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067120"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328067120"] {
display: table;
top: 296px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067120"] .tn-atom {
line-height: 1.2;
background-size: cover;
}
}#rec495453579 .tn-elem[data-elem-id="1660327823456"] {
color: #172b4d;
z-index: 3;
top: 337px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327823456"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327823456"] {
display: table;
top: 349px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327823456"] {
display: table;
top: 280px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327823456"] {
display: table;
top: 296px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327823456"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327823456"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328067122"] {
color: #172b4d;
z-index: 3;
top: 281px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067122"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328067122"] {
display: table;
top: 287px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328067122"] {
display: table;
top: 226px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328067122"] {
display: table;
top: 334px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328067122"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328067122"] {
display: table;
top: 344px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1664355590156"] {
color: #172b4d;
z-index: 3;
top: 313px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1664355590156"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1664355590156"] {
display: table;
top: 321px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1664355590156"] {
display: table;
top: 260px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1664355590156"] {
display: table;
top: 372px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1664355590156"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1664355590156"] {
display: table;
top: 382px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1738909171549"] {
color: #172b4d;
z-index: 3;
top: 345px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1738909171549"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1738909171549"] {
display: table;
top: 355px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1738909171549"] {
display: table;
top: 294px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1738909171549"] {
display: table;
top: 410px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1738909171549"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1738909171549"] {
display: table;
top: 420px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328170303"] {
color: #8999a9;
z-index: 3;
top: 503px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328170303"] .tn-atom {
vertical-align: middle;
color: #8999a9;
font-size: 18px;
font-family: var(--t-text-font,Arial);
line-height: 1.33;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328170303"] {
display: table;
top: 513px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328170303"] {
display: table;
top: 488px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328170303"] {
display: table;
top: 578px;;
left: calc(50% - 240px + 16px);;
width: 440px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328170303"] {
display: table;
top: 570px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328170303"] .tn-atom {
font-size: 16px;
line-height: 1.5;
background-size: cover;
}
}#rec495453579 .tn-elem[data-elem-id="1660328581896"] {
color: #8999a9;
z-index: 3;
top: 185px;;
left: calc(50% - 600px + 820px);;
width: 360px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328581896"] .tn-atom {
vertical-align: middle;
color: #8999a9;
font-size: 18px;
font-family: var(--t-text-font,Arial);
line-height: 1.33;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328581896"] {
display: table;
left: calc(50% - 480px + 640px);;
width: 288px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328581896"] {
display: table;
top: 830px;;
left: calc(50% - 320px + 24px);;
width: 288px;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328581896"] {
display: table;
top: 964px;;
left: calc(50% - 240px + 20px);;
width: 440px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328581896"] {
display: table;
top: 973px;;
left: calc(50% - 160px + 12px);;
width: 300px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328581896"] .tn-atom {
font-size: 16px;
line-height: 1.5;
background-size: cover;
}
}#rec495453579 .tn-elem[data-elem-id="1660328396738"] {
color: #8999a9;
z-index: 3;
top: 736px;;
left: calc(50% - 600px + 20px);;
width: 360px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328396738"] .tn-atom {
vertical-align: middle;
color: #8999a9;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328396738"] {
display: table;
top: 765px;;
left: calc(50% - 480px + 32px);;
width: 288px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328396738"] {
display: table;
top: 1125px;;
left: calc(50% - 320px + 24px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328396738"] {
display: table;
top: 1435px;;
left: calc(50% - 240px + 23px);;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328396738"] {
display: table;
top: 1428px;;
left: calc(50% - 160px + 9px);;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327824923"] {
color: #172b4d;
z-index: 3;
top: 401px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327824923"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327824923"] {
display: table;
top: 417px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327824923"] {
display: table;
top: 348px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327824923"] {
display: table;
top: 372px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327824923"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327824923"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327826356"] {
color: #172b4d;
z-index: 3;
top: 369px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327826356"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327826356"] {
display: table;
top: 383px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327826356"] {
display: table;
top: 314px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327826356"] {
display: table;
top: 334px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327826356"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327826356"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327833780"] {
color: #172b4d;
z-index: 3;
top: 433px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327833780"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327833780"] {
display: table;
top: 451px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327833780"] {
display: table;
top: 382px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327833780"] {
display: table;
top: 410px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327833780"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327833780"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327835132"] {
color: #172b4d;
z-index: 3;
top: 497px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327835132"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327835132"] {
display: table;
top: 519px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327835132"] {
display: table;
top: 450px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327835132"] {
display: table;
top: 486px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327835132"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327835132"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1695983077804"] {
color: #172b4d;
z-index: 3;
top: 586px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1695983077804"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1695983077804"] {
display: table;
top: 619px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1695983077804"] {
display: table;
top: 590px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1695983077804"] {
display: table;
top: 1265px;;
left: calc(50% - 240px + 19px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1695983077804"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1695983077804"] {
display: table;
top: 1268px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660328020471"] {
color: #172b4d;
z-index: 3;
top: 618px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328020471"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328020471"] {
display: table;
top: 653px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328020471"] {
display: table;
top: 624px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328020471"] {
display: table;
top: 1303px;;
left: calc(50% - 240px + 19px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328020471"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328020471"] {
display: table;
top: 1306px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1660327366231"] {
color: #8999a9;
z-index: 3;
top: 121px;;
left: calc(50% - 600px + 820px);;
width: 360px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327366231"] .tn-atom {
vertical-align: middle;
color: #8999a9;
font-size: 18px;
font-family: var(--t-text-font,Arial);
line-height: 1.33;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660327366231"] {
display: table;
left: calc(50% - 480px + 640px);;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327366231"] .tn-atom {
background-size: cover;
opacity: 1;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660327366231"] {
display: table;
top: 784px;;
left: calc(50% - 320px + 168px);;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327366231"] .tn-atom {
background-size: cover;
opacity: 1;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660327366231"] {
display: table;
top: 908px;;
left: calc(50% - 240px + 20px);;
width: 440px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660327366231"] {
display: table;
top: 925px;;
left: calc(50% - 160px + 10px);;
width: 300px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660327366231"] .tn-atom {
font-size: 16px;
line-height: 1.5;
background-size: cover;
}
}#rec495453579 .tn-elem[data-elem-id="1660723679978"] {
z-index: 3;
top: 0px;;
left: calc(50% - 600px + 787px);;
width: 1px;
height: 100%;
}
#rec495453579 .tn-elem[data-elem-id="1660723679978"] .tn-atom {
border-radius: 0px 0px 0px 0px;
background-color: #d0d6dd;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660723679978"] {
display: table;
left: calc(50% - 480px + 619px);;
height: 100%;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660723679978"] {
display: table;
}
#rec495453579 .tn-elem[data-elem-id="1660723679978"] .tn-atom {
background-size: cover;
opacity: 0;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660723679978"] {
display: table;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660723679978"] {
display: table;
}
}#rec495453579 .tn-elem[data-elem-id="1660625517826"] {
z-index: 3;
top: 0px;;
left: calc(50% - 600px + 0px);;
width: 592px;
height: 1px;
}
#rec495453579 .tn-elem[data-elem-id="1660625517826"] .tn-atom {
border-radius: 0px 0px 0px 0px;
opacity: 0;
background-color: #d0d6dd;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660625517826"] {
display: table;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660625517826"] {
display: table;
top: 743px;;
left: calc(50% - 320px + 24px);;
}
#rec495453579 .tn-elem[data-elem-id="1660625517826"] .tn-atom {
background-size: cover;
opacity: 1;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660625517826"] {
display: table;
top: 782px;;
left: calc(50% - 240px + 20px);;
width: 440px;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660625517826"] {
display: table;
top: 770px;;
left: calc(50% - 160px + 10px);;
width: 300px;
}
}#rec495453579 .tn-elem[data-elem-id="1660625579543"] {
z-index: 3;
top: 0px;;
left: calc(50% - 600px + 0px);;
width: 592px;
height: 1px;
}
#rec495453579 .tn-elem[data-elem-id="1660625579543"] .tn-atom {
border-radius: 0px 0px 0px 0px;
opacity: 0;
background-color: #d0d6dd;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660625579543"] {
display: table;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660625579543"] {
display: table;
top: 1060px;;
left: calc(50% - 320px + 24px);;
}
#rec495453579 .tn-elem[data-elem-id="1660625579543"] .tn-atom {
background-size: cover;
opacity: 1;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660625579543"] {
display: table;
top: 1204px;;
left: calc(50% - 240px + 20px);;
width: 440px;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660625579543"] {
display: table;
top: 1215px;;
left: calc(50% - 160px + 9px);;
width: 300px;
}
}#rec495453579 .tn-elem[data-elem-id="1660723501956"] {
z-index: 3;
top: 0px;;
left: calc(50% - 50% + 0px);;
width: 100%;
height: 1px;
}
#rec495453579 .tn-elem[data-elem-id="1660723501956"] .tn-atom {
border-radius: 0px 0px 0px 0px;
background-color: #d0d6dd;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660723501956"] {
display: table;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660723501956"] {
display: table;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660723501956"] {
display: table;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660723501956"] {
display: table;
}
}#rec495453579 .tn-elem[data-elem-id="1660328018624"] {
color: #172b4d;
z-index: 3;
top: 553px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328018624"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1660328018624"] {
display: table;
top: 585px;;
left: calc(50% - 480px + 28px);;
width: 278px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1660328018624"] {
display: table;
top: 556px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1660328018624"] {
display: table;
top: 1227px;;
left: calc(50% - 240px + 19px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1660328018624"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1660328018624"] {
display: table;
top: 1230px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1705327730563"] {
z-index: 3;
top: calc(847px - 101px + 3px);;
left: calc(50% - 3% + -3px);;
width: 6%;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1705327730563"] .tn-atom {
border-radius: 0px 0px 0px 0px;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
#rec495453579 .tn-elem[data-elem-id="1705327730563"] .tn-atom__img {
border-radius: 0px 0px 0px 0px;
object-position: center center;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1705327730563"] {
display: table;
top: calc(847px - 101px + 4px);;
left: calc(50% - 3% + 2px);;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1705327730563"] {
display: table;
top: calc(847px - 101px + -112px);;
left: calc(50% - 3% + 173px);;
width: 94px;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1705327730563"] {
display: table;
top: calc(847px - 101px + 57px);;
left: calc(50% - 3% + 147px);;
width: 100px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1705327730563"] {
display: table;
top: calc(847px - 101px + 25px);;
left: calc(50% - 3% + 1px);;
width: 71%;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1706690444440"] {
color: #172b4d;
z-index: 3;
top: 377px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1706690444440"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1706690444440"] {
display: table;
top: 389px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1706690444440"] {
display: table;
top: 328px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1706690444440"] {
display: table;
top: 448px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1706690444440"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1706690444440"] {
display: table;
top: 458px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1707905565159"] {
color: #172b4d;
z-index: 3;
top: 441px;;
left: calc(50% - 600px + 420px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1707905565159"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1707905565159"] {
display: table;
top: 457px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1707905565159"] {
display: table;
top: 396px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1707905565159"] {
display: table;
top: 524px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1707905565159"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1707905565159"] {
display: table;
top: 532px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1742980584483"] {
color: #172b4d;
z-index: 3;
top: 409px;;
left: calc(50% - 600px + 419px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1742980584483"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1742980584483"] {
display: table;
top: 423px;;
left: calc(50% - 480px + 332px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1742980584483"] {
display: table;
top: 362px;;
left: calc(50% - 320px + 326px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1742980584483"] {
display: table;
top: 486px;;
left: calc(50% - 240px + 244px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1742980584483"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1742980584483"] {
display: table;
top: 496px;;
left: calc(50% - 160px + 166px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1708962345240"] {
color: #172b4d;
z-index: 3;
top: 682px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1708962345240"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1708962345240"] {
display: table;
top: 721px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1708962345240"] {
display: table;
top: 692px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1708962345240"] {
display: table;
top: 1379px;;
left: calc(50% - 240px + 19px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1708962345240"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1708962345240"] {
display: table;
top: 1382px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1742566995756"] {
color: #172b4d;
z-index: 3;
top: 650px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1742566995756"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1742566995756"] {
display: table;
top: 687px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1742566995756"] {
display: table;
top: 658px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1742566995756"] {
display: table;
top: 1341px;;
left: calc(50% - 240px + 19px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1742566995756"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1742566995756"] {
display: table;
top: 1344px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1723122768750"] {
color: #172b4d;
z-index: 3;
top: 373px;;
left: calc(50% - 600px + 886px);;
width: 360px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1723122768750"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1723122768750"] {
display: table;
top: 409px;;
left: calc(50% - 480px + 709px);;
width: 215px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1723122768750"] {
display: table;
top: 973px;;
left: calc(50% - 320px + 89px);;
width: 330px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1723122768750"] .tn-atom {
vertical-align: middle;
white-space: normal;
background-size: cover;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1723122768750"] {
display: table;
top: 1128px;;
left: calc(50% - 240px + 71px);;
width: 440px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1723122768750"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1723122768750"] {
display: table;
top: 793px;;
left: calc(50% - 160px + 57px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] {
color: #172b4d;
z-index: 3;
top: 297px;;
left: calc(50% - 600px + 816px);;
width: 360px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] {
display: table;
top: 317px;;
left: calc(50% - 480px + 636px);;
width: 288px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] {
display: table;
top: 874px;;
left: calc(50% - 320px + 328px);;
width: 273px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] .tn-atom {
vertical-align: middle;
white-space: normal;
background-size: cover;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] {
display: table;
top: 1068px;;
left: calc(50% - 240px + 20px);;
width: 335px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1768398747383000001"] {
display: table;
top: 1099px;;
left: calc(50% - 160px + 9px);;
width: 300px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1726735717183"] {
color: #172b4d;
z-index: 3;
top: 465px;;
left: calc(50% - 600px + 16px);;
width: 336px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1726735717183"] .tn-atom {
vertical-align: middle;
color: #172b4d;
font-size: 16px;
font-family: var(--t-text-font,Arial);
line-height: 1.5;
font-weight: 400;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
--t396-shadow-text-opacity: 100%;
text-shadow: var(--t396-shadow-text-x, 0px) var(--t396-shadow-text-y, 0px) var(--t396-shadow-text-blur, 0px) rgba(var(--t396-shadow-text-color), var(--t396-shadow-text-opacity, 100%));
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1726735717183"] {
display: table;
top: 485px;;
left: calc(50% - 480px + 28px);;
width: 264px;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1726735717183"] {
display: table;
top: 416px;;
left: calc(50% - 320px + 20px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1726735717183"] {
display: table;
top: 448px;;
left: calc(50% - 240px + 16px);;
width: 212px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1726735717183"] .tn-atom {
font-size: 15px;
line-height: 1.47;
background-size: cover;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1726735717183"] {
display: table;
left: calc(50% - 160px + 6px);;
width: 140px;
height: auto;
}
}#rec495453579 .tn-elem[data-elem-id="1768399150632"] {
z-index: 3;
top: 369px;;
left: calc(50% - 600px + 820px);;
width: 55px;
height: 55px;
}
#rec495453579 .tn-elem[data-elem-id="1768399150632"] .tn-atom {
border-radius: 10px 10px 10px 10px;
background-color: #172b4d;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1768399150632"] {
display: table;
top: 417px;;
left: calc(50% - 480px + 640px);;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1768399150632"] {
display: table;
top: 968px;;
left: calc(50% - 320px + 24px);;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1768399150632"] {
display: table;
top: 1129px;;
left: calc(50% - 240px + 21px);;
width: 41px;
height: 41px;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1768399150632"] {
display: table;
top: 794px;;
left: calc(50% - 160px + 10px);;
}
}#rec495453579 .tn-elem[data-elem-id="1768399141699"] {
z-index: 3;
top: 378px;;
left: calc(50% - 600px + 829px);;
width: 38px;
height: auto;
}
#rec495453579 .tn-elem[data-elem-id="1768399141699"] .tn-atom {
border-radius: 0px 0px 0px 0px;
background-position: center center;
border-width: var(--t396-borderwidth, 0);
border-style: var(--t396-borderstyle, solid);
border-color: var(--t396-bordercolor, transparent);
transition: background-color var(--t396-speedhover,0s) ease-in-out, color var(--t396-speedhover,0s) ease-in-out, border-color var(--t396-speedhover,0s) ease-in-out, box-shadow var(--t396-shadowshoverspeed,0.2s) ease-in-out;
}
#rec495453579 .tn-elem[data-elem-id="1768399141699"] .tn-atom__img {
border-radius: 0px 0px 0px 0px;
object-position: center center;
}
@media screen and (max-width: 1199px) {
#rec495453579 .tn-elem[data-elem-id="1768399141699"] {
display: table;
top: 426px;;
left: calc(50% - 480px + 649px);;
height: auto;
}
}
@media screen and (max-width: 959px) {
#rec495453579 .tn-elem[data-elem-id="1768399141699"] {
display: table;
top: 977px;;
left: calc(50% - 320px + 33px);;
height: auto;
}
}
@media screen and (max-width: 639px) {
#rec495453579 .tn-elem[data-elem-id="1768399141699"] {
display: table;
top: 1136px;;
left: calc(50% - 240px + 28px);;
width: 28px;
height: auto;
}
}
@media screen and (max-width: 479px) {
#rec495453579 .tn-elem[data-elem-id="1768399141699"] {
display: table;
top: 801px;;
left: calc(50% - 160px + 17px);;
height: auto;
}
}</style>
<div class='t396'>
<div class="t396__artboard" data-artboard-recid="495453579" data-artboard-screens="320,480,640,960,1200"
data-artboard-height="847"
data-artboard-valign="center"
data-artboard-upscale="grid"
data-artboard-height-res-320="1536"
data-artboard-height-res-480="1513"
data-artboard-height-res-640="1196"
data-artboard-height-res-960="840"
>
<div class="t396__carrier" data-artboard-recid="495453579"></div>
<div class="t396__filter" data-artboard-recid="495453579"></div>
<div class='t396__elem tn-elem uc-logo--on-white tn-elem__4954535791712236782477' data-elem-id='1712236782477' data-elem-type='image'
data-field-top-value="74"
data-field-left-value="20"
data-field-height-value="42" data-field-width-value="105" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-filewidth-value="259" data-field-fileheight-value="103" data-field-heightmode-value="hug"
data-field-top-res-320-value="36" data-field-left-res-320-value="7" data-field-height-res-320-value="42"
data-field-top-res-480-value="40px" data-field-left-res-480-value="15" data-field-height-res-480-value="42" data-field-width-res-480-value="105" data-field-container-res-480-value="grid"
data-field-top-res-640-value="61" data-field-left-res-640-value="24" data-field-height-res-640-value="42"
data-field-left-res-960-value="36" data-field-height-res-960-value="42"
>
<a class='tn-atom' href="https://slurm.io/" >
<img class='tn-atom__img' src='https://static.tildacdn.com/tild3630-3434-4637-b730-343538653735/slurm_logo_new_1_1.svg' alt='' imgfield='tn_img_1712236782477' />
</a>
</div>
<div class='t396__elem tn-elem uc-logo--on-dark tn-elem__4954535791712235605947' data-elem-id='1712235605947' data-elem-type='image'
data-field-top-value="74"
data-field-left-value="20"
data-field-height-value="42" data-field-width-value="105" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-filewidth-value="1188" data-field-fileheight-value="471" data-field-heightmode-value="hug"
data-field-top-res-320-value="36" data-field-left-res-320-value="7" data-field-height-res-320-value="42"
data-field-top-res-480-value="40" data-field-left-res-480-value="15" data-field-height-res-480-value="42" data-field-width-res-480-value="105" data-field-container-res-480-value="grid"
data-field-top-res-640-value="61" data-field-left-res-640-value="24" data-field-height-res-640-value="42"
data-field-left-res-960-value="36" data-field-height-res-960-value="42"
>
<a class='tn-atom' href="https://slurm.io/" >
<img class='tn-atom__img' src='https://static.tildacdn.com/tild6135-3939-4135-b731-656566303162/white.svg' alt='' imgfield='tn_img_1712235605947' />
</a>
</div>
<div class='t396__elem tn-elem uc-logo--on-white tn-elem__4954535791692506348245' data-elem-id='1692506348245' data-elem-type='image'
data-field-top-value="58"
data-field-left-value="820"
data-field-height-value="57" data-field-width-value="120" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-filewidth-value="87" data-field-fileheight-value="41" data-field-heightmode-value="hug"
data-field-top-res-320-value="863" data-field-left-res-320-value="10" data-field-height-res-320-value="57"
data-field-top-res-480-value="835" data-field-left-res-480-value="20" data-field-height-res-480-value="57"
data-field-top-res-640-value="755" data-field-left-res-640-value="24" data-field-height-res-640-value="57"
data-field-left-res-960-value="640" data-field-height-res-960-value="57"
>
<a class='tn-atom js-click-zero-stat' href="https://southbridge.io/?utm_source=slurm&utm_medium=footer" rel="nofollow" data-tilda-event-name="/tilda/click/rec495453579/button1692506348245">
<img class='tn-atom__img' src='https://static.tildacdn.com/tild6266-3163-4334-b735-323663336439/sb-logo-dark.svg' alt='' imgfield='tn_img_1692506348245' />
</a>
</div>
<div class='t396__elem tn-elem uc-logo--on-dark tn-elem__4954535791692506631214' data-elem-id='1692506631214' data-elem-type='image'
data-field-top-value="58"
data-field-left-value="820"
data-field-height-value="56" data-field-width-value="120" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-filewidth-value="86" data-field-fileheight-value="40" data-field-heightmode-value="hug"
data-field-top-res-320-value="873" data-field-left-res-320-value="10" data-field-height-res-320-value="56"
data-field-top-res-480-value="845" data-field-left-res-480-value="20" data-field-height-res-480-value="56"
data-field-top-res-640-value="757" data-field-left-res-640-value="24" data-field-height-res-640-value="56"
data-field-left-res-960-value="640" data-field-height-res-960-value="56"
>
<a class='tn-atom js-click-zero-stat' href="https://southbridge.io/?utm_source=slurm&utm_medium=footer" rel="nofollow" data-tilda-event-name="/tilda/click/rec495453579/button1692506631214">
<img class='tn-atom__img' src='https://static.tildacdn.com/tild3438-6232-4636-b961-366339386263/sb-logo-light.svg' alt='' imgfield='tn_img_1692506631214' />
</a>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791660327289504' data-elem-id='1660327289504' data-elem-type='text'
data-field-top-value="121"
data-field-left-value="20"
data-field-height-value="24" data-field-width-value="360" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="18"
data-field-left-res-320-value="10" data-field-width-res-320-value="300" data-field-fontsize-res-320-value="16"
data-field-top-res-480-value="81" data-field-left-res-480-value="20"
data-field-top-res-640-value="68" data-field-left-res-640-value="153"
data-field-left-res-960-value="32" data-field-width-res-960-value="288"
>
<div class='tn-atom'field='tn_text_1660327289504'>Обучение ИТ-профессионалов</div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327420094' data-elem-id='1660327420094' data-elem-type='text'
data-field-top-value="185"
data-field-left-value="14"
data-field-height-value="26" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="24"
data-field-left-res-320-value="5" data-field-width-res-320-value="300"
data-field-left-res-480-value="15" data-field-width-res-480-value="440"
data-field-top-res-640-value="124" data-field-left-res-640-value="20"
data-field-left-res-960-value="27" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="tel:+74952480580"rel="nofollow"style="color: inherit">+7 (495) 248-05-80</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327526179' data-elem-id='1660327526179' data-elem-type='text'
data-field-top-value="223"
data-field-left-value="16"
data-field-height-value="26" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="24"
data-field-left-res-320-value="6" data-field-width-res-320-value="300"
data-field-left-res-480-value="16" data-field-width-res-480-value="440"
data-field-top-res-640-value="162" data-field-left-res-640-value="20"
data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="mailto:ask@slurm.io"rel="nofollow"style="color: inherit">ask@slurm.io</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328247771' data-elem-id='1660328247771' data-elem-type='text'
data-field-top-value="547"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="614" data-field-left-res-320-value="6" data-field-width-res-320-value="300"
data-field-top-res-480-value="622" data-field-left-res-480-value="16" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="532" data-field-left-res-640-value="326"
data-field-top-res-960-value="557" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/corporate"style="color: inherit">Корпоративное обучение</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328067115' data-elem-id='1660328067115' data-elem-type='text'
data-field-top-value="217"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="258" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="258" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="158" data-field-left-res-640-value="326"
data-field-top-res-960-value="219" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/calendar"style="color: inherit">Календарь</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu--partner tn-elem__4954535791660328673693' data-elem-id='1660328673693' data-elem-type='text'
data-field-top-value="229"
data-field-left-value="816"
data-field-height-value="48" data-field-width-value="360" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1017" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1008" data-field-left-res-480-value="20" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="874" data-field-left-res-640-value="20" data-field-width-res-640-value="256"
data-field-top-res-960-value="229" data-field-left-res-960-value="636" data-field-width-res-960-value="288"
>
<div class='tn-atom'><a href="https://southbridge.io/?utm_source=slurm&utm_medium=footer"rel="nofollow"style="color: inherit"><span style="font-weight: 700;">Southbridge.</span> DevOps-аутсорсер, поддержка высоконагруженных проектов.</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327820270' data-elem-id='1660327820270' data-elem-type='text'
data-field-top-value="305"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="258" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="246" data-field-left-res-640-value="20"
data-field-top-res-960-value="315" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://habr.com/ru/companies/slurm/articles/"rel="nofollow"style="color: inherit">Хабр</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu--podcast tn-elem__4954535791660728009618' data-elem-id='1660728009618' data-elem-type='text'
data-field-top-value="273"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="220" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="212" data-field-left-res-640-value="20"
data-field-top-res-960-value="281" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://slurm.mave.digital/"rel="nofollow"style="color: inherit">Подкаст</a></div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791660728533851' data-elem-id='1660728533851' data-elem-type='text'
data-field-top-value="274"
data-field-left-value="8"
data-field-height-value="24" data-field-width-value="9" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="218" data-field-left-res-320-value="0"
data-field-top-res-480-value="222" data-field-left-res-480-value="8" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="211" data-field-left-res-640-value="10"
data-field-top-res-960-value="283" data-field-left-res-960-value="20"
>
<div class='tn-atom'field='tn_text_1660728533851'>•</div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328247775' data-elem-id='1660328247775' data-elem-type='text'
data-field-top-value="579"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="652" data-field-left-res-320-value="6" data-field-width-res-320-value="300"
data-field-top-res-480-value="660" data-field-left-res-480-value="16" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="566" data-field-left-res-640-value="326"
data-field-top-res-960-value="591" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/universal-tickets"style="color: inherit">Универсальные доступы</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328067118' data-elem-id='1660328067118' data-elem-type='text'
data-field-top-value="185"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="220" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="220" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="124" data-field-left-res-640-value="326"
data-field-top-res-960-value="185" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/catalog"style="color: inherit">Все курсы</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328247777' data-elem-id='1660328247777' data-elem-type='text'
data-field-top-value="611"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="690" data-field-left-res-320-value="6" data-field-width-res-320-value="300"
data-field-top-res-480-value="698" data-field-left-res-480-value="16" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="600" data-field-left-res-640-value="326"
data-field-top-res-960-value="625" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/faq-for-oformitel"style="color: inherit">Оплата курса от компании</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328067120' data-elem-id='1660328067120' data-elem-type='text'
data-field-top-value="249"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="296" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="296" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="192" data-field-left-res-640-value="326"
data-field-top-res-960-value="253" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/free"style="color: inherit">Бесплатные материалы</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327823456' data-elem-id='1660327823456' data-elem-type='text'
data-field-top-value="337"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="296" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="280" data-field-left-res-640-value="20"
data-field-top-res-960-value="349" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://t.me/slurmnews"style="color: inherit">Telegram</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328067122' data-elem-id='1660328067122' data-elem-type='text'
data-field-top-value="281"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="344" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="334" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="226" data-field-left-res-640-value="326"
data-field-top-res-960-value="287" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/speaker"style="color: inherit">Спикеры</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791664355590156' data-elem-id='1664355590156' data-elem-type='text'
data-field-top-value="313"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="382" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="372" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="260" data-field-left-res-640-value="326"
data-field-top-res-960-value="321" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/for-speakers"style="color: inherit">Для спикеров</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791738909171549' data-elem-id='1738909171549' data-elem-type='text'
data-field-top-value="345"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="420" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="410" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="294" data-field-left-res-640-value="326"
data-field-top-res-960-value="355" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://slurm.io/careers"style="color: inherit">Работа в Слёрме</a></div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791660328170303' data-elem-id='1660328170303' data-elem-type='text'
data-field-top-value="503"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="18"
data-field-top-res-320-value="570" data-field-left-res-320-value="9" data-field-width-res-320-value="300" data-field-fontsize-res-320-value="16"
data-field-top-res-480-value="578" data-field-left-res-480-value="16" data-field-width-res-480-value="440"
data-field-top-res-640-value="488" data-field-left-res-640-value="326"
data-field-top-res-960-value="513" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'field='tn_text_1660328170303'>Корпоративным клиентам</div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791660328581896' data-elem-id='1660328581896' data-elem-type='text'
data-field-top-value="185"
data-field-left-value="820"
data-field-height-value="24" data-field-width-value="360" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="18"
data-field-top-res-320-value="973" data-field-left-res-320-value="12" data-field-width-res-320-value="300" data-field-fontsize-res-320-value="16"
data-field-top-res-480-value="964" data-field-left-res-480-value="20" data-field-width-res-480-value="440"
data-field-top-res-640-value="830" data-field-left-res-640-value="24" data-field-width-res-640-value="288"
data-field-left-res-960-value="640" data-field-width-res-960-value="288"
>
<div class='tn-atom'field='tn_text_1660328581896'>Партнёры</div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791660328396738' data-elem-id='1660328396738' data-elem-type='text'
data-field-top-value="736"
data-field-left-value="20"
data-field-height-value="24" data-field-width-value="360" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1428" data-field-left-res-320-value="9"
data-field-top-res-480-value="1435" data-field-left-res-480-value="23"
data-field-top-res-640-value="1125" data-field-left-res-640-value="24"
data-field-top-res-960-value="765" data-field-left-res-960-value="32" data-field-width-res-960-value="288"
>
<div class='tn-atom'field='tn_text_1660328396738'>© 2018—2025 ООО «Слёрм»</div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327824923' data-elem-id='1660327824923' data-elem-type='text'
data-field-top-value="401"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="372" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="348" data-field-left-res-640-value="20"
data-field-top-res-960-value="417" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://vk.com/slurm_io"rel="nofollow"style="color: inherit">VK</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327826356' data-elem-id='1660327826356' data-elem-type='text'
data-field-top-value="369"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="334" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="314" data-field-left-res-640-value="20"
data-field-top-res-960-value="383" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://www.youtube.com/c/slurm_io"rel="nofollow"style="color: inherit">YouTube</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327833780' data-elem-id='1660327833780' data-elem-type='text'
data-field-top-value="433"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="410" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="382" data-field-left-res-640-value="20"
data-field-top-res-960-value="451" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://dzen.ru/slurm"rel="nofollow"style="color: inherit">Дзен</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660327835132' data-elem-id='1660327835132' data-elem-type='text'
data-field-top-value="497"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="486" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="450" data-field-left-res-640-value="20"
data-field-top-res-960-value="519" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://www.linkedin.com/company/slurm"rel="nofollow"style="color: inherit">LinkedIn</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791695983077804' data-elem-id='1695983077804' data-elem-type='text'
data-field-top-value="586"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1268" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1265" data-field-left-res-480-value="19" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="590" data-field-left-res-640-value="20"
data-field-top-res-960-value="619" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/privacy"style="color: inherit">Политика конфиденциальности</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328020471' data-elem-id='1660328020471' data-elem-type='text'
data-field-top-value="618"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1306" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1303" data-field-left-res-480-value="19" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="624" data-field-left-res-640-value="20"
data-field-top-res-960-value="653" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/oferta-slurm"style="color: inherit">Публичная оферта</a></div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791660327366231' data-elem-id='1660327366231' data-elem-type='text'
data-field-top-value="121"
data-field-left-value="820"
data-field-height-value="24" data-field-width-value="360" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="18"
data-field-top-res-320-value="925" data-field-left-res-320-value="10" data-field-width-res-320-value="300" data-field-fontsize-res-320-value="16"
data-field-top-res-480-value="908" data-field-left-res-480-value="20" data-field-width-res-480-value="440"
data-field-top-res-640-value="784" data-field-left-res-640-value="168"
data-field-left-res-960-value="640"
>
<div class='tn-atom'field='tn_text_1660327366231'>Генеральный партнёр Слёрм</div>
</div>
<div class='t396__elem tn-elem uc-footer-line tn-elem__4954535791660723679978' data-elem-id='1660723679978' data-elem-type='shape'
data-field-top-value="0"
data-field-left-value="787"
data-field-height-value="100" data-field-width-value="1" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="%"
data-field-widthunits-value="px"
data-field-left-res-960-value="619" data-field-height-res-960-value="100"
>
<div class='tn-atom' >
</div>
</div>
<div class='t396__elem tn-elem uc-footer-line tn-elem__4954535791660625517826' data-elem-id='1660625517826' data-elem-type='shape'
data-field-top-value="0"
data-field-left-value="0"
data-field-height-value="1" data-field-width-value="592" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-top-res-320-value="770" data-field-left-res-320-value="10" data-field-width-res-320-value="300"
data-field-top-res-480-value="782" data-field-left-res-480-value="20" data-field-width-res-480-value="440"
data-field-top-res-640-value="743" data-field-left-res-640-value="24"
>
<div class='tn-atom' >
</div>
</div>
<div class='t396__elem tn-elem uc-footer-line tn-elem__4954535791660625579543' data-elem-id='1660625579543' data-elem-type='shape'
data-field-top-value="0"
data-field-left-value="0"
data-field-height-value="1" data-field-width-value="592" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-top-res-320-value="1215" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1204" data-field-left-res-480-value="20" data-field-width-res-480-value="440"
data-field-top-res-640-value="1060" data-field-left-res-640-value="24"
>
<div class='tn-atom' >
</div>
</div>
<div class='t396__elem tn-elem uc-footer-line--top tn-elem__4954535791660723501956' data-elem-id='1660723501956' data-elem-type='shape'
data-field-top-value="0"
data-field-left-value="0"
data-field-height-value="1" data-field-width-value="100" data-field-axisy-value="top"
data-field-axisx-value="center"
data-field-container-value="window"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="%"
>
<div class='tn-atom' >
</div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791660328018624' data-elem-id='1660328018624' data-elem-type='text'
data-field-top-value="553"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1230" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1227" data-field-left-res-480-value="19" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="556" data-field-left-res-640-value="20"
data-field-top-res-960-value="585" data-field-left-res-960-value="28" data-field-width-res-960-value="278"
>
<div class='tn-atom'><a href="https://api.edu.slurm.io/uploads/license_dpo.pdf"target="_blank"style="color: inherit">Лицензия №ДЛ-1368 от 22.08.2019</a></div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791705327730563' data-elem-id='1705327730563' data-elem-type='image'
data-field-top-value="3"
data-field-left-value="-3"
data-field-height-value="101" data-field-width-value="6" data-field-axisy-value="bottom"
data-field-axisx-value="center"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="%"
data-field-filewidth-value="600" data-field-fileheight-value="840" data-field-heightmode-value="hug"
data-field-top-res-320-value="25" data-field-left-res-320-value="1" data-field-height-res-320-value="99" data-field-width-res-320-value="71"
data-field-top-res-480-value="57" data-field-left-res-480-value="147" data-field-height-res-480-value="140" data-field-width-res-480-value="100" data-field-widthunits-res-480-value="px"
data-field-top-res-640-value="-112" data-field-left-res-640-value="173" data-field-height-res-640-value="132" data-field-width-res-640-value="94" data-field-widthunits-res-640-value="px"
data-field-top-res-960-value="4" data-field-left-res-960-value="2" data-field-height-res-960-value="81"
>
<div class='tn-atom' >
<img class='tn-atom__img' src='https://static.tildacdn.com/tild6562-3736-4663-b362-303664366334/idle-anim3_green_lin.gif' alt='' imgfield='tn_img_1705327730563' />
</div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791706690444440' data-elem-id='1706690444440' data-elem-type='text'
data-field-top-value="377"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="458" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="448" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="328" data-field-left-res-640-value="326"
data-field-top-res-960-value="389" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/reviews"style="color: inherit">Отзывы</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791707905565159' data-elem-id='1707905565159' data-elem-type='text'
data-field-top-value="441"
data-field-left-value="420"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="532" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="524" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="396" data-field-left-res-640-value="326"
data-field-top-res-960-value="457" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/blog"style="color: inherit"><strong>Блог</strong></a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791742980584483' data-elem-id='1742980584483' data-elem-type='text'
data-field-top-value="409"
data-field-left-value="419"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="496" data-field-left-res-320-value="166" data-field-width-res-320-value="140"
data-field-top-res-480-value="486" data-field-left-res-480-value="244" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="362" data-field-left-res-640-value="326"
data-field-top-res-960-value="423" data-field-left-res-960-value="332" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="/about_us"style="color: inherit">О нас</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791708962345240' data-elem-id='1708962345240' data-elem-type='text'
data-field-top-value="682"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1382" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1379" data-field-left-res-480-value="19" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="692" data-field-left-res-640-value="20"
data-field-top-res-960-value="721" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://slurm.io/info"style="color: inherit">Юридическая информация</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791742566995756' data-elem-id='1742566995756' data-elem-type='text'
data-field-top-value="650"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1344" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1341" data-field-left-res-480-value="19" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="658" data-field-left-res-640-value="20"
data-field-top-res-960-value="687" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://slurm.io/newsletter"style="color: inherit">Согласие на рассылку</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu--partner tn-elem__4954535791723122768750' data-elem-id='1723122768750' data-elem-type='text'
data-field-top-value="373"
data-field-left-value="886"
data-field-height-value="48" data-field-width-value="360" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="793" data-field-left-res-320-value="57" data-field-width-res-320-value="300"
data-field-top-res-480-value="1128" data-field-left-res-480-value="71" data-field-width-res-480-value="440" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="973" data-field-left-res-640-value="89" data-field-height-res-640-value="48" data-field-width-res-640-value="330" data-field-container-res-640-value="grid" data-field-heightunits-res-640-value="px" data-field-textfit-res-640-value="autoheight"
data-field-top-res-960-value="409" data-field-left-res-960-value="709" data-field-width-res-960-value="215"
>
<div class='tn-atom'field='tn_text_1723122768750'><strong style="font-weight: 700;">СДЕЛАНО В РОССИИ</strong><br>Входим в реестр Российского ПО</div>
</div>
<div class='t396__elem tn-elem uc-footer-menu--partner tn-elem__4954535791768398747383000001' data-elem-id='1768398747383000001' data-elem-type='text'
data-field-top-value="297"
data-field-left-value="816"
data-field-height-value="48" data-field-width-value="360" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-top-res-320-value="1099" data-field-left-res-320-value="9" data-field-width-res-320-value="300"
data-field-top-res-480-value="1068" data-field-left-res-480-value="20" data-field-width-res-480-value="335" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="874" data-field-left-res-640-value="328" data-field-height-res-640-value="48" data-field-width-res-640-value="273" data-field-container-res-640-value="grid" data-field-heightunits-res-640-value="px" data-field-textfit-res-640-value="autoheight"
data-field-top-res-960-value="317" data-field-left-res-960-value="636" data-field-width-res-960-value="288"
>
<div class='tn-atom'><a href="https://core247.io/"rel="nofollow"style="color: inherit"><strong style="font-weight: 700;">CORE 24/7.</strong> Официальный представитель Слёрма в Казахстане.</a></div>
</div>
<div class='t396__elem tn-elem uc-footer-menu tn-elem__4954535791726735717183' data-elem-id='1726735717183' data-elem-type='text'
data-field-top-value="465"
data-field-left-value="16"
data-field-height-value="24" data-field-width-value="336" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-textfit-value="autoheight" data-field-fontsize-value="16"
data-field-left-res-320-value="6" data-field-width-res-320-value="140"
data-field-top-res-480-value="448" data-field-left-res-480-value="16" data-field-width-res-480-value="212" data-field-fontsize-res-480-value="15"
data-field-top-res-640-value="416" data-field-left-res-640-value="20"
data-field-top-res-960-value="485" data-field-left-res-960-value="28" data-field-width-res-960-value="264"
>
<div class='tn-atom'><a href="https://rutube.ru/channel/39652890/"rel="nofollow"style="color: inherit">Rutube</a></div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791768399150632' data-elem-id='1768399150632' data-elem-type='shape'
data-field-top-value="369"
data-field-left-value="820"
data-field-height-value="55" data-field-width-value="55" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-top-res-320-value="794" data-field-left-res-320-value="10"
data-field-top-res-480-value="1129" data-field-left-res-480-value="21" data-field-height-res-480-value="41" data-field-width-res-480-value="41"
data-field-top-res-640-value="968" data-field-left-res-640-value="24"
data-field-top-res-960-value="417" data-field-left-res-960-value="640"
>
<div class='tn-atom' >
</div>
</div>
<div class='t396__elem tn-elem tn-elem__4954535791768399141699' data-elem-id='1768399141699' data-elem-type='image'
data-field-top-value="378"
data-field-left-value="829"
data-field-height-value="38" data-field-width-value="38" data-field-axisy-value="top"
data-field-axisx-value="left"
data-field-container-value="grid"
data-field-topunits-value="px"
data-field-leftunits-value="px"
data-field-heightunits-value="px"
data-field-widthunits-value="px"
data-field-filewidth-value="512" data-field-fileheight-value="512" data-field-heightmode-value="hug"
data-field-top-res-320-value="801" data-field-left-res-320-value="17" data-field-height-res-320-value="28"
data-field-top-res-480-value="1136" data-field-left-res-480-value="28" data-field-height-res-480-value="28" data-field-width-res-480-value="28"
data-field-top-res-640-value="977" data-field-left-res-640-value="33" data-field-height-res-640-value="38"
data-field-top-res-960-value="426" data-field-left-res-960-value="649" data-field-height-res-960-value="38"
>
<div class='tn-atom' >
<img class='tn-atom__img' src='https://static.tildacdn.com/tild6664-3637-4833-b338-393633633963/coat-of-arms_3.svg' alt='' imgfield='tn_img_1768399141699' />
</div>
</div>
</div>
</div>
<script>
t_onReady(function () {
t_onFuncLoad('t396_init', function () {
t396_init('495453579');
});
});
</script>
<!-- /T396 -->
</div>
<div id="rec825799301" class="r t-rec" style=" " data-animationappear="off" data-record-type="131" >
<!-- T123 -->
<div class="t123" >
<div class="t-container_100 ">
<div class="t-width t-width_100 ">
<!-- nominify begin -->
<style>
/*Добавляем скругления углов у карточек стандартных блоков*/
.t-popup__container{ /*Сюда вставляем класс блока из таблицы выше*/
border-radius: 16px !important; /*Радиус скругления у блока*/
overflow: hidden; /*Используется для некоторых блоков, к которым не применяется скругление*/
/*Если нужно скруглить углы, каждый по отдельности, то используйте вместо одного значения четыре,
написав их через пробел, например 20px 30px 10px 50px*/
}
</style>
<style>
/*Размытие фона*/
.t-popup.t-popup_show {
-webkit-backdrop-filter: blur(5px);
backdrop-filter: blur(5px);
}
</style>
<!-- nominify end -->
</div>
</div>
</div>
</div>
</div>
<!--/footer-->
<!-- POST END -->
</div>
<!--/allrecords--> <!-- Stat --> <!-- Yandex.Metrika counter 49219348 --> <script type="text/javascript" data-tilda-cookie-type="analytics">setTimeout(function(){(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window,document,"script","https://mc.yandex.ru/metrika/tag.js","ym");window.mainMetrikaId='49219348';ym(window.mainMetrikaId,"init",{clickmap:true,trackLinks:true,accurateTrackBounce:true,webvisor:true,params:{__ym:{"ymCms":{"cms":"tilda","cmsVersion":"1.0","cmsCatalog":"1"}}},ecommerce:"dataLayer"});},2000);</script> <noscript><div><img src="https://mc.yandex.ru/watch/49219348" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <script type="text/javascript">if(!window.mainTracker) {window.mainTracker='tilda';}
window.tildastatscroll='yes';setTimeout(function(){(function(d,w,k,o,g) {var n=d.getElementsByTagName(o)[0],s=d.createElement(o),f=function(){n.parentNode.insertBefore(s,n);};s.type="text/javascript";s.async=true;s.key=k;s.id="tildastatscript";s.src=g;if(w.opera=="[object Opera]") {d.addEventListener("DOMContentLoaded",f,false);} else {f();}})(document,window,'3ca9b9471ab76a4a58118835b5fb250d','script','https://static.tildacdn.com/js/tilda-stat-1.0.min.js');},2000);</script> <!-- Rating Mail.ru counter --> <script type="text/javascript" data-tilda-cookie-type="analytics">setTimeout(function(){var _tmr=window._tmr||(window._tmr=[]);_tmr.push({id:"3557140",type:"pageView",start:(new Date()).getTime()});window.mainMailruId='3557140';(function(d,w,id) {if(d.getElementById(id)) {return;}
var ts=d.createElement("script");ts.type="text/javascript";ts.async=true;ts.id=id;ts.src="https://top-fwz1.mail.ru/js/code.js";var f=function() {var s=d.getElementsByTagName("script")[0];s.parentNode.insertBefore(ts,s);};if(w.opera=="[object Opera]") {d.addEventListener("DOMContentLoaded",f,false);} else {f();}})(document,window,"topmailru-code");},2000);</script> <noscript><img src="https://top-fwz1.mail.ru/counter?id=3557140;js=na" style="border:0;position:absolute;left:-9999px;width:1px;height:1px" alt="Top.Mail.Ru" /></noscript> <!-- //Rating Mail.ru counter --> </body> </html>