Марсель Ибраев, СТО Слёрм, вёл мероприятие, а Александр Лукьянченко, тимлид в команде архитектуры Авито, и Иван Круглов, Staff Software Engineer в Databricks, делились экспертизой.
Оба инженера имеют опыт не просто с работы какой-то конкретной реализацией service mesh, но с построением собственного, что намного круче.
Первая часть расшифровки с АМА-сессии. В первой части больше про основы service mesh, внедрение и вопросы в основном популярные, на которые спикеры готовились отвечать, в этой части более частные вопросы, заданные во время трансляции, от инженеров, погружённых в тему.
Марсель Ибраев: Вопрос от Андрея, какие вам известны техники контроля очередности запуска proxy-контейнеров? Как можно обеспечить запуск proxy-контейнера до старта (инициализации) app-контейнера?
Иван Круглов: Давайте я отвечу. Решали эту проблему. Readiness-пробы. В Kubernetes есть readiness-пробы. Мы делали так, что health check стучится в proxy, который стучится в приложение. Соответственно, у вас readiness-проба начинает отрабатывать, только когда у вас отрабатывает эта цепочка. То есть у вас и proxy поднялся, и приложение поднялось.
Александр Лукьянченко: Мы также решаем. Здесь есть правда еще один узкий кейс, когда приложение завершается. Важно, чтобы они тоже завершились в правильной последовательности. Для этого пока что нет механизма автоматического, это делается просто при pre-stop hook и какое-то количество времени, чтобы трафик успел уйти.
Марсель Ибраев: Насколько сложен конфиг каждого Service Proxy? Можете ли показать какой-нибудь продакшн пример? Нет ли проблем с рассинхронизацией конфига на разных нодах?
Иван Круглов: Конфиг Service Proxy сложен в зависимости от количества сервисов и количества endpoint этих сервисов. Я видел очень большие конфиги. Если попытаться зайти в Envoy и посмотреть конфиг — cмотреть страшно. Как на фабриках изготавливают огромные бобины метров на пять диаметром. Вот это такая бобина конфигурационного файла. Что-то там понять сложно. Пример… прямо так сходу под рукой ничего нет. Нет ли проблем с рассинхронизацией конфига на разных нодах? Нет. У меня не было из-за динамичности. Envoy может конфиги получать в двух режимах: первый это пулл, второй пуш. Первый — это когда деплой знает, где находится Control Plane. Он устанавливает с ним соединение и раз в пять секунд забирает оттуда конфигурацию. Второе — это когда Control Plane сама пушит в реалтайме конфигурацию обратно в Envoy. Теоретически возможен corner case, когда Envoy стартанул, но до Control Plane достучаться не смог, в этом случае у него может уезжать статистика. Но мы заводили отдельный график, который показывает нам, какая версия, на каких нодах, поэтому проблемы с рассинхронизацией у нас не было.
Александр Лукьянченко: У нас примерно так же. Рассинхронизация здесь может быть тогда, когда идёт какая-то деградация Сontrol Plane. Такое у нас было в виду бага. Когда есть какая-то логика, которая долго отрабатывает и просто не успевает сообщить нужную конфигурацию Envoy. Тогда это может быть.
Иван Круглов: Отвечая на вопрос про сложность конфига service mesh, хочу добавить, что конфиг сложен, но прикол в том, что подразумевается, что вы смотреть в него не будете. И это ключевая разница между Nginx, Haproxy и Envoy. У Envoy есть минимальный, так называемый, bootstrap config, который описывает, где Control Plane — где тот сервис, который отдаст конфигурацию в дальнейшем. То есть такое маленькое описание, а всю остальную конфигурацию он получает динамически. Она стримится в него в реалтайме, и по большому счёту в .config вам нужно смотреть, только если что-то надо подебажить. Это не Ngnix, когда ты открываешь Ngnix.conf и начинаешь писать его руками: тут листенер, тут сервис, тут appstream. Нет, это так не делается.
Марсель Ибраев: Продолжая эту тему, были ли такие кейсы, когда всё-таки приходилось лезть: типа трафик не совсем такой?
Иван Круглов: Да. Там тоже не всё так прямо гладко идеально. Я не очень знаю, как конкретно это происходит в Istio. Но в моей реализации service mesh у нас получилось так, что когда нужно было руками прописывать, что такой сервис находится тут. И когда получается нестыковка: где-то ошиблись в описании, приходится попытаться понять, что конкретно сделал Envoy. Когда вы посылаете запрос по HTTP в Envoy, он отвечает 400, 500 или что-то другое. И вы не всегда знаете, это сервис ответил 400 или это сам Envoy не нашёл маршрут, по которому нужно было сойти, и ответил 400. Не всегда понятно, поэтому иногда нужно и в логах посмотреть, и в конфигурации посмотреть. На начальных этапах так бывает, но это не было большой проблемой. Обычно когда мне нужно что-то дебажить, я беру конкретные инстансы, отрезаю от него всю конфигурацию, которая мне не нужна, и начинаю дебажить какой-то кусочек.
Марсель Ибраев: Как происходит обновление mesh в очень больших кластерах (больше 1000 нод), когда версии несовместимы?
Александр Лукьянченко: Никак.
Иван Круглов: Вот тут надо позвать Женю Алькова, который, по-моему, у вас, Саша, и переходил с версии 1.5 на 1.7. Там какая-то была несовместимая версия. Но вообще никак.
Александр Лукьянченко: Если отвечать на конкретно этот вопрос, то никак, потому что переходить на несовместимые версии невозможно. Если говорить про конкретные имплементации, сам Envoy, его протокол, сущности, — они все обратно совместимы в достаточно большой range-версии. И поэтому, например, недавно было обновление с версии 2.2 на 2.3 их xDS-протокола… Оно проводится просто путём того, что мы в один момент времени поддерживаем и тот, и другой протокол и постепенно переводим Envoy с одной версии на другую, затем старую версию отрубаем. Само непосредственно обновление mesh, это в первую очередь Control Plane, проходит достаточно гладко: потому что обычно есть несколько инстансов, и мы просто добавляем новую версию, то есть обновляем каждый Control Plane c масштабированием горизонтально. В случае с Data Plane обычно так же, как при внедрении service mesh с нуля, мы постепенно раскатываем новую версию по всей системе, смотрим, как она себя ведёт.
Марсель Ибраев: Тоже интересный вопрос, кстати. Можно ли добавить внешние энвои в service mesh? В кубере мы всё поставили, но у нас внешние базы на виртуалках, как тут быть?
Александр Лукьянченко: Технически никто не мешает поставить куда угодно Envoy. И у нас так сделано для внешних балансировщиков, для кейсов, где инстансы живут вне Kubernetes. По факту отличий особо никаких нет. Это тот же самый Envoy, тот же самый процесс, он просто висит где-то вне Kubernetes и потребляет данные о том, как ему нужно быть сконфигурированным из того же Control Plane. Его нужно в Discovery сделать: поставить какой-нибудь балансировщик и с помощью него отказоустойчиво ходить на несколько поднятых Control Plane, например, в том же Kubernetes.
Марсель Ибраев: Да, логично. Есть ли реализация service mesh для OpenShift? Кто знает?
Иван Круглов: Не могу ответить со стопроцентной уверенностью, но OpenShift это тот же самый Kubernetes с примочками RedHat. Наивно полагая, я не вижу проблем, чтобы поставить тот же самый Istio туда. Под капотом же обычный кубер.
Александр Лукьянченко: Так и есть. И RedHat достаточно мощно продвигают интеграцию с Istio. Так что не должно быть проблем.
Марсель Ибраев: Умеет ли service mesh применять свои фичи к egress трафику? Если я хочу настроить ретраи/circuit breaker/timeout к внешним ресурсам? И что с HTTPS в таком случае?
Иван Круглов: Да, умеет. Говоря, да, умеет, я имею ввиду: Envoy умеет это делать.
У него ретари, circuit breaker и таймауты применяются к исходящему трафику. А какие ресурсы, внешние или внутренние, не играет большой роли. В одном случае у вас будет кластер динамичный, у которого эндпоинты динамично подтягиваются, в другом — статичный кластер, который вы захардкодили. А что с HTTPS в этом случае. Здесь я немного не понимаю вопроса. Но как я у себя делаю это взаимодействие. У меня приложение по HTTP ходило на локальный хост, а Envoy уже устанавливал HTTPS-соединение. Получается, у нас как бы трафик незащищённый, но незащищённый только на loopback-интерфейсе, по сути, внутри пода или внутри ноды. При этом проблемы я не видел. А дальше устанавливается HTTPS соединение. Если здесь есть конкретные подводные камни, тогда нужно немножко уточнить вопрос.
Александр Лукьянченко: Если говорить про Istio, я бы ещё добавил, что там используется такой подход, что если мы говорим об egress трафике как трафике наружу, не из конкретного инстанса наружу, а именно из системы наружу, в интернет, то есть выделенный компонент, который там устанавливается, и делается так, что весь трафик, который идёт во вне mesh, роутится и приземляется на специальный тот же выделенный Envoy-Proxy, который называется egress, и далее отправляется уже оттуда наружу во вне системы. И там как раз можно рулить всякими политиками, куда можно ходить наружу, запрещать какие-то вещи и т.д. Такое есть решение.
Марсель Ибраев: Следующий вопрос: ожидать ли перехода всех решений на SMI (service mesh Interface)?
Александр Лукьянченко: Вот здесь у меня лично нет уверенности, что все решения придут в SMI. Но наверное, если это будет стандартом, который поддержит большинство самых популярных решений, то в итоге, да. Но сейчас я затрудняюсь ответить, будет ли это так.
Марсель Ибраев: Учитывая любовь Kubernetes к плагинам и стандартизации, почему бы нет. Насколько возможно внедрение service mesh без sidecar? Видимо, имеется ввиду без дополнительно запущенного контейнера в рамках одного пода.
Иван Круглов: Давайте отвечу, потому что у меня есть в этом опыт. Вообще возможно. Что делает sidecar? Sidecar — это, грубо говоря, штука, которая умеет принимать конфигурацию и умеет на основании этого раутить трафик. Если вы можете написать какую-нибудь библиотеку, которая будет ходить в Control Plane, запрашивать конфигурацию в нужном виде и посылать запрос, куда надо, то это по-прежнему будет service mesh. По крайней мере, как я его понимаю. И он будет работать. Известных реализаций, насколько я знаю, нет. Теоретически да, на практике боюсь не получится.
Александр Лукьянченко: Кстати, у меня вылетело из головы. Есть такая реализация одна. Мы даже как-то пробовали. Но название, к сожалению, забыл.
Иван Круглов: Это стопудово будет не мейнстрим.
Марсель Ибраев: Что нужно учитывать разработчикам, на что обратить внимание при разработке сервисов, которые будут использоваться совместно с service mesh? И нужно ли вообще что-то учитывать?
Александр Лукьянченко: У меня есть наболевшая вещь. С точки зрения перфоманса. Если мы говорим про, например, HTTP1 взаимодействие, и это взаимодействие делается по протоколу даже 1.1, но без keep-alive, надо понимать, что с точки зрения технологии того, как проходят flow запросы сквозь систему, у нас каждый раз, когда мы открываем новое TCP-соединение под новый HTTP-запрос, мы это делаем по всем Proxy. То есть мы идем на Envoy-proxy, от Envoy-Proxy дальше в следующий сервис, там на входе опять Envoy и так далее. С точки зрения эффективности, при большой нагрузке оказывает достаточно большое влияние. Если мы постоянно создаем по 10 000 новых коннектов, это не очень эффективно. Несмотря на то что Envoy умеет держать пулы и прочее, мы сталкивались с проблемами, что это плохо влияло на перформанс и конечную задержку. Это первое, что приходит в голову именно с точки зрения технической составляющей реализации сервиса. В остальном, например, трейсинг. Если вы не будете прокидывать заголовки, то автоматически никаких графов, никаких путей взаимодействия получить нельзя. Тоже важный момент. В остальном, в принципе, технология стоит немного сбоку от разработки, и, наверное, каких-то таких критериев других особо нет.
Марсель Ибраев: Очень хорошо, что есть такие вопросы, что разработчики интересуются, что вообще есть на инфраструктуре и как она там работает. Мне это очень отзывается.
Как сделать отказоустойчивый egress со статическим адресом?
Иван Круглов: Я, наверное, не до конца понимаю. Мы говорим про egress в рамках Envoy или egress в рамках Kubernetes кластера? Если в рамках Envoy, когда мы говорим про egress трафик, то есть исходящий трафик от ноды куда-то там, там проблемы со статическими адресами не вижу. Заводите кластер, в котором статически прописываете адрес. А если Istio egress в рамках кубера — тогда не подскажу.
Александр Лукьянченко: Имеется ввиду Istio egress, который выделенный компонент, у него статический адрес, и он отказоустойчив. Мне только одно приходит в голову. Сделать его не настоящим, то есть какой-то виртуальный, видимо, адрес. Иначе он не будет отказоустойчивым. Либо я неправильно понимаю вопрос. Какой-то адрес, под которым будет скрываться не один egress, а несколько. Грубо говоря, тот же кластер IP, но статичный. Его зашить с каким-то айпишником статичным, и он будет балансировать уже на реальной egress, который даже будет там переезжать с ноды на ноду.
Марсель Ибраев: Видимо, кейс в том, чтобы у нас из системы ответы в мир шли с какого-то одного ip-адреса.
Есть ли у service mesh функция API Gateway на примере Istio? Недавно появилась функция Istio service mesh virtual machine, в чём видите его полезность?
Иван Круглов: Судя по названию, Istio service mesh virtual machine — это как раз-таки возможность включить в Istio что-то, что не находится в Kubernetes. Есть ли в Istio функция API Gateway? Давайте тут я немножко поясню. Есть такая категоризация, как North-South Traffic и East-West. То есть трафик, который идёт с севера на юг, и трафик, который идёт с востока на запад. Немножко абстрактное описание. Но если мы представим себе компанию в виде квадратика, то трафик с севера на юг пересекает границы компании, границы кубика, кадратика. А East-West располагается в его рамках. North-South — это трафик внешний, который либо приходит извне, либо уходит во вне. А West-East — трафик, который остаётся в рамках компании. Так вот service mesh — это решение для East-West трафика в основной его массе. Сейчас, конечно, его начали немножко распиливать, но в своём корне service mesh — это про микросервисы, про взаимодействие между ними, про внутри компании. API Gateway это про вне компании. Когда мы выставляем свою айпишку наружу и хотим, чтобы к нам смог прийти условный рандомный разработчик. Поэтому в своем корне у service mesh фичи API Gateway нет, но современные реализации, тот же Istio Egress, это некоторый API Gаteway, но он немножко низкоуровневый. Потому что в API Gateway обычные фичи более высокоуровневые, чем то, что может позволить себе service mesh. Service mesh и API Gateway сосуществуют, у них есть некоторые пересечения, но решают они немножко разные проблемы.
Александр Лукьянченко: Кстати, по поводу терминологии, тут вопрос, что имеется в виду под API Gateway. Многие решения сейчас называют себя API Gateway, по факту являясь просто Proxy, которая настраивается гибко по правилам локейшенов, куда нужно проксировать дальше.
Иван Круглов: Оk, я под API Gateway понимаю классику жанра, не просто L7 proxy, а L7++, который умеет реализовывать бизнес-логику у себя на борту. Такого service mesh не умеет.
Марсель Ибраев: Как обеспечивается микросегментация и безопасность взаимодействия микросервисов в service mesh?
Иван Круглов: Обеспечивается она на уровне сертификатов. Еще вижу вопрос, дружит ли service mesh с сетевыми политиками? Они немножко связаны. Поясню, в чем разница. Сетевая политика — это L2, L3. А микросегментация service mesh — это L7, то есть на уровне, когда устанавливается TLS-соединение. И тут можно сделать прикольные политики. Если у вас микросервисам розданы правильные сертификаты, можно задавать гибкие политики. Например, этот сервис к этому может ходить, а к другому не может. Это не просто на уровне «вот этот ip-адрес сюда может ходить, а вот этот ip-адрес сюда не может ходить». Решение принимается на момент установки TLS-соединения.
Марсель Ибраев: Про сетевые политии, насколько я понимаю, здесь имеется ввиду по типу, как у Calico. Есть ли смысл вообще использовать их вместе с service mesh?
Иван Круглов: Смотрите, я такое не реализовывал, но если бы реализовывал, я бы про это размышлял следующим образом. Для меня сетевая политика это так называемая Coarse Grain Control — грубый контроль, когда вы хотите сделать так, что этот неймспейс или кластер в этот кластер ходить не может. Вот этот пул ip-адресов вот в этот пул ip-адресов ходить не может. Или с помощью сетевых политик я бы отделял дев от прода и от стейджинга. Такая грубая нарезка. mTLS-контроль в service mesh это более fine-grained, более тонкая настройка. Когда, например, в продакшене вы хотите разделить Data Flow: этому пользователю или сертификату можно ходить. Если у вас есть сертификат, выданный на пользователя, не на сервис, а на пользователя, то можно говорить, пройдет ли этот конкретный запрос на уровне пользователя или нет. Такой fine-grained tuning.
Александр Лукьянченко: Я бы ещё добавил, что отличие — возможно — в уровне безопасности. Потому что надо понимать, что если service mesh раскатан неполноценно, то политики не везде будут работать. Например, есть возможность тонко затюнить, какие именно запросы, какие именно коннекты перехватываются на Envoy-proxy, какие не перехватываются. И если у нас под mesh не вся инфраструктура, не весь проект, то, очевидно, политики в этих местах работать не будут. Здесь нужно контролировать, какую часть мы реально покрываем. В случае с Calico network policies, если мы используем Kubernetes уже для всей инфраструктуры, то это решение, которое гарантированно на ноды раскатит определенные политики. В этом плане есть отличия. Они несколько на разных уровнях действуют.
Марсель Ибраев: Мы уже частично отвечали на этот вопрос. Есть ли альтернатива Envoy, учитывая, что service mesh это динамическая конфигурация?
Иван Круглов: Envoy основной, Linkerd — второй. И как Саша говорил, Ngnix и Haproxy подтягиваются. Не знаю, в каком состоянии подтягивания они находятся, но они движутся в этом направлении. Если вы не хотите заниматься экзотикой, то Envoy просто мейнстрим.
<!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>АМА-сессия Слёрма по service mesh. Часть 2</title>
<meta name="description" content="АМА-сессия Слёрма по service mesh. Часть 2 | Марсель Ибраев, СТО Слёрм, вёл мероприятие, а Александр Лукьянченко, тимлид в команде архитектуры Авито, и Иван Круглов, Staff Software Engineer в Databricks, делились экспертизой | Блог slurm.io">
<meta name="keywords" content="">
<meta name="robots" content="index, follow" />
<meta property="og:title" content="АМА-сессия Слёрма по service mesh. Часть 2" />
<meta property="og:description" content="АМА-сессия Слёрма по service mesh. Часть 2 | Марсель Ибраев, СТО Слёрм, вёл мероприятие, а Александр Лукьянченко, тимлид в команде архитектуры Авито, и Иван Круглов, Staff Software Engineer в Databricks, делились экспертизой | Блог slurm.io" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://slurm.io/blog/tpost/ec3o9vhus1-ama-sessiya-slyorma-po-service-mesh-chas" />
<meta property="og:image" content="https://static.tildacdn.com/tild3562-3631-4763-b334-663139396362/-1.png" />
<link rel="canonical" href="https://slurm.io/blog/tpost/ec3o9vhus1-ama-sessiya-slyorma-po-service-mesh-chas" />
<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/ec3o9vhus1-ama-sessiya-slyorma-po-service-mesh-chas?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=1771520896" 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=1771520896" 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=1771520896" onerror="this.loaderr='y';"></script><script src="https://static.tildacdn.com/ws/project705564/tilda-blocks-page13176281.min.js?t=1771520896" 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="ec3o9vhus1" 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="2021-07-07MSK05:53:00+03:00" />
<meta itemprop="dateModified" content="2025-04-08MSK13:13:20+03:00" />
<meta itemprop="mainEntityOfPage" content="https://slurm.io/blog/tpost/ec3o9vhus1-ama-sessiya-slyorma-po-service-mesh-chas" />
<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">АМА-сессия Слёрма по service mesh. Часть 2</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/tild3562-3631-4763-b334-663139396362/-1.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>Марсель Ибраев, СТО Слёрм, вёл мероприятие, а Александр Лукьянченко, тимлид в команде архитектуры Авито, и Иван Круглов, Staff Software Engineer в Databricks, делились экспертизой.<br />Оба инженера имеют опыт не просто с работы какой-то конкретной реализацией service mesh, но с построением собственного, что намного круче.<br /><br /><a href="https://habr.com/ru/company/southbridge/blog/564170/">Первая часть расшифровки с АМА-сессии</a>. В первой части больше про основы service mesh, внедрение и вопросы в основном популярные, на которые спикеры готовились отвечать, в этой части более частные вопросы, заданные во время трансляции, от инженеров, погружённых в тему.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев: </em>Вопрос от Андрея, <strong style="color: rgb(17, 17, 17);">какие вам известны техники контроля очередности запуска proxy-контейнеров? Как можно обеспечить запуск proxy-контейнера до старта (инициализации) app-контейнера?</strong><br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Давайте я отвечу. Решали эту проблему. Readiness-пробы. В Kubernetes есть readiness-пробы. Мы делали так, что health check стучится в proxy, который стучится в приложение. Соответственно, у вас readiness-проба начинает отрабатывать, только когда у вас отрабатывает эта цепочка. То есть у вас и proxy поднялся, и приложение поднялось.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Мы также решаем. Здесь есть правда еще один узкий кейс, когда приложение завершается. Важно, чтобы они тоже завершились в правильной последовательности. Для этого пока что нет механизма автоматического, это делается просто при pre-stop hook и какое-то количество времени, чтобы трафик успел уйти.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> <strong style="color: rgb(17, 17, 17);">Насколько сложен конфиг каждого Service Proxy?</strong> Можете ли показать какой-нибудь продакшн пример? Нет ли проблем с рассинхронизацией конфига на разных нодах?<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Конфиг Service Proxy сложен в зависимости от количества сервисов и количества endpoint этих сервисов. Я видел очень большие конфиги. Если попытаться зайти в Envoy и посмотреть конфиг — cмотреть страшно. Как на фабриках изготавливают огромные бобины метров на пять диаметром. Вот это такая бобина конфигурационного файла. Что-то там понять сложно. Пример… прямо так сходу под рукой ничего нет. Нет ли проблем с рассинхронизацией конфига на разных нодах? Нет. У меня не было из-за динамичности. Envoy может конфиги получать в двух режимах: первый это пулл, второй пуш. Первый — это когда деплой знает, где находится Control Plane. Он устанавливает с ним соединение и раз в пять секунд забирает оттуда конфигурацию. Второе — это когда Control Plane сама пушит в реалтайме конфигурацию обратно в Envoy. Теоретически возможен corner case, когда Envoy стартанул, но до Control Plane достучаться не смог, в этом случае у него может уезжать статистика. Но мы заводили отдельный график, который показывает нам, какая версия, на каких нодах, поэтому проблемы с рассинхронизацией у нас не было.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> У нас примерно так же. Рассинхронизация здесь может быть тогда, когда идёт какая-то деградация Сontrol Plane. Такое у нас было в виду бага. Когда есть какая-то логика, которая долго отрабатывает и просто не успевает сообщить нужную конфигурацию Envoy. Тогда это может быть.<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов: </em>Отвечая на вопрос про сложность конфига service mesh, хочу добавить, что конфиг сложен, но прикол в том, что подразумевается, что вы смотреть в него не будете. И это ключевая разница между Nginx, Haproxy и Envoy. У Envoy есть минимальный, так называемый, bootstrap config, который описывает, где Control Plane — где тот сервис, который отдаст конфигурацию в дальнейшем. То есть такое маленькое описание, а всю остальную конфигурацию он получает динамически. Она стримится в него в реалтайме, и по большому счёту в .config вам нужно смотреть, только если что-то надо подебажить. Это не Ngnix, когда ты открываешь Ngnix.conf и начинаешь писать его руками: тут листенер, тут сервис, тут appstream. Нет, это так не делается.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> <strong style="color: rgb(17, 17, 17);">Продолжая эту тему, были ли такие кейсы, когда всё-таки приходилось лезть: типа трафик не совсем такой?</strong><br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Да. Там тоже не всё так прямо гладко идеально. Я не очень знаю, как конкретно это происходит в Istio. Но в моей реализации service mesh у нас получилось так, что когда нужно было руками прописывать, что такой сервис находится тут. И когда получается нестыковка: где-то ошиблись в описании, приходится попытаться понять, что конкретно сделал Envoy. Когда вы посылаете запрос по HTTP в Envoy, он отвечает 400, 500 или что-то другое. И вы не всегда знаете, это сервис ответил 400 или это сам Envoy не нашёл маршрут, по которому нужно было сойти, и ответил 400. Не всегда понятно, поэтому иногда нужно и в логах посмотреть, и в конфигурации посмотреть. На начальных этапах так бывает, но это не было большой проблемой. Обычно когда мне нужно что-то дебажить, я беру конкретные инстансы, отрезаю от него всю конфигурацию, которая мне не нужна, и начинаю дебажить какой-то кусочек.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> <strong style="color: rgb(17, 17, 17);">Как происходит обновление mesh в очень больших кластерах (больше 1000 нод), когда версии несовместимы?</strong><br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Никак.<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Вот тут надо позвать Женю Алькова, который, по-моему, у вас, Саша, и переходил с версии 1.5 на 1.7. Там какая-то была несовместимая версия. Но вообще никак.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Если отвечать на конкретно этот вопрос, то никак, потому что переходить на несовместимые версии невозможно. Если говорить про конкретные имплементации, сам Envoy, его протокол, сущности, — они все обратно совместимы в достаточно большой range-версии. И поэтому, например, недавно было обновление с версии 2.2 на 2.3 их xDS-протокола… Оно проводится просто путём того, что мы в один момент времени поддерживаем и тот, и другой протокол и постепенно переводим Envoy с одной версии на другую, затем старую версию отрубаем. Само непосредственно обновление mesh, это в первую очередь Control Plane, проходит достаточно гладко: потому что обычно есть несколько инстансов, и мы просто добавляем новую версию, то есть обновляем каждый Control Plane c масштабированием горизонтально. В случае с Data Plane обычно так же, как при внедрении service mesh с нуля, мы постепенно раскатываем новую версию по всей системе, смотрим, как она себя ведёт.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> Тоже интересный вопрос, кстати. <strong style="color: rgb(17, 17, 17);">Можно ли добавить внешние энвои в service mesh? В кубере мы всё поставили, но у нас внешние базы на виртуалках, как тут быть?</strong><br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Технически никто не мешает поставить куда угодно Envoy. И у нас так сделано для внешних балансировщиков, для кейсов, где инстансы живут вне Kubernetes. По факту отличий особо никаких нет. Это тот же самый Envoy, тот же самый процесс, он просто висит где-то вне Kubernetes и потребляет данные о том, как ему нужно быть сконфигурированным из того же Control Plane. Его нужно в Discovery сделать: поставить какой-нибудь балансировщик и с помощью него отказоустойчиво ходить на несколько поднятых Control Plane, например, в том же Kubernetes.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> Да, логично. <strong style="color: rgb(17, 17, 17);">Есть ли реализация service mesh для OpenShift?</strong> Кто знает?<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Не могу ответить со стопроцентной уверенностью, но OpenShift это тот же самый Kubernetes с примочками RedHat. Наивно полагая, я не вижу проблем, чтобы поставить тот же самый Istio туда. Под капотом же обычный кубер.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Так и есть. И RedHat достаточно мощно продвигают интеграцию с Istio. Так что не должно быть проблем.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> <strong style="color: rgb(17, 17, 17);">Умеет ли service mesh применять свои фичи к egress трафику?</strong> Если я хочу настроить ретраи/circuit breaker/timeout к внешним ресурсам? И что с HTTPS в таком случае?<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Да, умеет. Говоря, да, умеет, я имею ввиду: Envoy умеет это делать.<br />У него ретари, circuit breaker и таймауты применяются к исходящему трафику. А какие ресурсы, внешние или внутренние, не играет большой роли. В одном случае у вас будет кластер динамичный, у которого эндпоинты динамично подтягиваются, в другом — статичный кластер, который вы захардкодили. А что с HTTPS в этом случае. Здесь я немного не понимаю вопроса. Но как я у себя делаю это взаимодействие. У меня приложение по HTTP ходило на локальный хост, а Envoy уже устанавливал HTTPS-соединение. Получается, у нас как бы трафик незащищённый, но незащищённый только на loopback-интерфейсе, по сути, внутри пода или внутри ноды. При этом проблемы я не видел. А дальше устанавливается HTTPS соединение. Если здесь есть конкретные подводные камни, тогда нужно немножко уточнить вопрос.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Если говорить про Istio, я бы ещё добавил, что там используется такой подход, что если мы говорим об egress трафике как трафике наружу, не из конкретного инстанса наружу, а именно из системы наружу, в интернет, то есть выделенный компонент, который там устанавливается, и делается так, что весь трафик, который идёт во вне mesh, роутится и приземляется на специальный тот же выделенный Envoy-Proxy, который называется egress, и далее отправляется уже оттуда наружу во вне системы. И там как раз можно рулить всякими политиками, куда можно ходить наружу, запрещать какие-то вещи и т.д. Такое есть решение.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> Следующий вопрос: <strong style="color: rgb(17, 17, 17);">ожидать ли перехода всех решений на SMI (service mesh Interface)?</strong><br /><br /><strong style="color: rgb(17, 17, 17);">Александр Лукьянченко:</strong> Вот здесь у меня лично нет уверенности, что все решения придут в SMI. Но наверное, если это будет стандартом, который поддержит большинство самых популярных решений, то в итоге, да. Но сейчас я затрудняюсь ответить, будет ли это так.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> Учитывая любовь Kubernetes к плагинам и стандартизации, почему бы нет. <strong style="color: rgb(17, 17, 17);">Насколько возможно внедрение service mesh без sidecar?</strong> Видимо, имеется ввиду без дополнительно запущенного контейнера в рамках одного пода.<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Давайте отвечу, потому что у меня есть в этом опыт. Вообще возможно. Что делает sidecar? Sidecar — это, грубо говоря, штука, которая умеет принимать конфигурацию и умеет на основании этого раутить трафик. Если вы можете написать какую-нибудь библиотеку, которая будет ходить в Control Plane, запрашивать конфигурацию в нужном виде и посылать запрос, куда надо, то это по-прежнему будет service mesh. По крайней мере, как я его понимаю. И он будет работать. Известных реализаций, насколько я знаю, нет. Теоретически да, на практике боюсь не получится.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Кстати, у меня вылетело из головы. Есть такая реализация одна. Мы даже как-то пробовали. Но название, к сожалению, забыл.<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Это стопудово будет не мейнстрим.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> <strong style="color: rgb(17, 17, 17);">Что нужно учитывать разработчикам, на что обратить внимание при разработке сервисов, которые будут использоваться совместно с service mesh?</strong> И нужно ли вообще что-то учитывать?<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> У меня есть наболевшая вещь. С точки зрения перфоманса. Если мы говорим про, например, HTTP1 взаимодействие, и это взаимодействие делается по протоколу даже 1.1, но без keep-alive, надо понимать, что с точки зрения технологии того, как проходят flow запросы сквозь систему, у нас каждый раз, когда мы открываем новое TCP-соединение под новый HTTP-запрос, мы это делаем по всем Proxy. То есть мы идем на Envoy-proxy, от Envoy-Proxy дальше в следующий сервис, там на входе опять Envoy и так далее. С точки зрения эффективности, при большой нагрузке оказывает достаточно большое влияние. Если мы постоянно создаем по 10 000 новых коннектов, это не очень эффективно. Несмотря на то что Envoy умеет держать пулы и прочее, мы сталкивались с проблемами, что это плохо влияло на перформанс и конечную задержку. Это первое, что приходит в голову именно с точки зрения технической составляющей реализации сервиса. В остальном, например, трейсинг. Если вы не будете прокидывать заголовки, то автоматически никаких графов, никаких путей взаимодействия получить нельзя. Тоже важный момент. В остальном, в принципе, технология стоит немного сбоку от разработки, и, наверное, каких-то таких критериев других особо нет.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев: </em>Очень хорошо, что есть такие вопросы, что разработчики интересуются, что вообще есть на инфраструктуре и как она там работает. Мне это очень отзывается.<br /><strong style="color: rgb(17, 17, 17);">Как сделать отказоустойчивый egress со статическим адресом?</strong><br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Я, наверное, не до конца понимаю. Мы говорим про egress в рамках Envoy или egress в рамках Kubernetes кластера? Если в рамках Envoy, когда мы говорим про egress трафик, то есть исходящий трафик от ноды куда-то там, там проблемы со статическими адресами не вижу. Заводите кластер, в котором статически прописываете адрес. А если Istio egress в рамках кубера — тогда не подскажу.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Имеется ввиду Istio egress, который выделенный компонент, у него статический адрес, и он отказоустойчив. Мне только одно приходит в голову. Сделать его не настоящим, то есть какой-то виртуальный, видимо, адрес. Иначе он не будет отказоустойчивым. Либо я неправильно понимаю вопрос. Какой-то адрес, под которым будет скрываться не один egress, а несколько. Грубо говоря, тот же кластер IP, но статичный. Его зашить с каким-то айпишником статичным, и он будет балансировать уже на реальной egress, который даже будет там переезжать с ноды на ноду.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> Видимо, кейс в том, чтобы у нас из системы ответы в мир шли с какого-то одного ip-адреса.<br /><strong style="color: rgb(17, 17, 17);">Есть ли у service mesh функция API Gateway на примере Istio?</strong> Недавно появилась функция Istio service mesh virtual machine, в чём видите его полезность?<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Судя по названию, Istio service mesh virtual machine — это как раз-таки возможность включить в Istio что-то, что не находится в Kubernetes. Есть ли в Istio функция API Gateway? Давайте тут я немножко поясню. Есть такая категоризация, как North-South Traffic и East-West. То есть трафик, который идёт с севера на юг, и трафик, который идёт с востока на запад. Немножко абстрактное описание. Но если мы представим себе компанию в виде квадратика, то трафик с севера на юг пересекает границы компании, границы кубика, кадратика. А East-West располагается в его рамках. North-South — это трафик внешний, который либо приходит извне, либо уходит во вне. А West-East — трафик, который остаётся в рамках компании. Так вот service mesh — это решение для East-West трафика в основной его массе. Сейчас, конечно, его начали немножко распиливать, но в своём корне service mesh — это про микросервисы, про взаимодействие между ними, про внутри компании. API Gateway это про вне компании. Когда мы выставляем свою айпишку наружу и хотим, чтобы к нам смог прийти условный рандомный разработчик. Поэтому в своем корне у service mesh фичи API Gateway нет, но современные реализации, тот же Istio Egress, это некоторый API Gаteway, но он немножко низкоуровневый. Потому что в API Gateway обычные фичи более высокоуровневые, чем то, что может позволить себе service mesh. Service mesh и API Gateway сосуществуют, у них есть некоторые пересечения, но решают они немножко разные проблемы.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Кстати, по поводу терминологии, тут вопрос, что имеется в виду под API Gateway. Многие решения сейчас называют себя API Gateway, по факту являясь просто Proxy, которая настраивается гибко по правилам локейшенов, куда нужно проксировать дальше.<br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов: </em>Оk, я под API Gateway понимаю классику жанра, не просто L7 proxy, а L7++, который умеет реализовывать бизнес-логику у себя на борту. Такого service mesh не умеет.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> <strong style="color: rgb(17, 17, 17);">Как обеспечивается микросегментация и безопасность взаимодействия микросервисов в service mesh?</strong><br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Обеспечивается она на уровне сертификатов. Еще вижу вопрос, дружит ли service mesh с сетевыми политиками? Они немножко связаны. Поясню, в чем разница. Сетевая политика — это L2, L3. А микросегментация service mesh — это L7, то есть на уровне, когда устанавливается TLS-соединение. И тут можно сделать прикольные политики. Если у вас микросервисам розданы правильные сертификаты, можно задавать гибкие политики. Например, этот сервис к этому может ходить, а к другому не может. Это не просто на уровне «вот этот ip-адрес сюда может ходить, а вот этот ip-адрес сюда не может ходить». Решение принимается на момент установки TLS-соединения.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> <strong style="color: rgb(17, 17, 17);">Про сетевые политии, насколько я понимаю, здесь имеется ввиду по типу, как у Calico. Есть ли смысл вообще использовать их вместе с service mesh?</strong><br /><br /><em style="color: rgb(17, 17, 17);">Иван Круглов:</em> Смотрите, я такое не реализовывал, но если бы реализовывал, я бы про это размышлял следующим образом. Для меня сетевая политика это так называемая Coarse Grain Control — грубый контроль, когда вы хотите сделать так, что этот неймспейс или кластер в этот кластер ходить не может. Вот этот пул ip-адресов вот в этот пул ip-адресов ходить не может. Или с помощью сетевых политик я бы отделял дев от прода и от стейджинга. Такая грубая нарезка. mTLS-контроль в service mesh это более fine-grained, более тонкая настройка. Когда, например, в продакшене вы хотите разделить Data Flow: этому пользователю или сертификату можно ходить. Если у вас есть сертификат, выданный на пользователя, не на сервис, а на пользователя, то можно говорить, пройдет ли этот конкретный запрос на уровне пользователя или нет. Такой fine-grained tuning.<br /><br /><em style="color: rgb(17, 17, 17);">Александр Лукьянченко:</em> Я бы ещё добавил, что отличие — возможно — в уровне безопасности. Потому что надо понимать, что если service mesh раскатан неполноценно, то политики не везде будут работать. Например, есть возможность тонко затюнить, какие именно запросы, какие именно коннекты перехватываются на Envoy-proxy, какие не перехватываются. И если у нас под mesh не вся инфраструктура, не весь проект, то, очевидно, политики в этих местах работать не будут. Здесь нужно контролировать, какую часть мы реально покрываем. В случае с Calico network policies, если мы используем Kubernetes уже для всей инфраструктуры, то это решение, которое гарантированно на ноды раскатит определенные политики. В этом плане есть отличия. Они несколько на разных уровнях действуют.<br /><br /><em style="color: rgb(17, 17, 17);">Марсель Ибраев:</em> Мы уже частично отвечали на этот вопрос. <strong style="color: rgb(17, 17, 17);">Есть ли альтернатива Envoy, учитывая, что service mesh это динамическая конфигурация?</strong><br /><br />Иван Круглов: Envoy основной, Linkerd — второй. И как Саша говорил, Ngnix и Haproxy подтягиваются. Не знаю, в каком состоянии подтягивания они находятся, но они движутся в этом направлении. Если вы не хотите заниматься экзотикой, то Envoy просто мейнстрим.</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">2021-07-07 10:53</span>
</span>
<a href="https://slurm.io/blog#!/tfeeds/784947206928/c/Service mesh" class="t-feed__post-popup__tag"><span class="t-uptitle t-uptitle_xs" itemprop="about">Service mesh</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: 'ec3o9vhus1',
date: '2021-07-07 10:53',
mediatype: 'image',
mediadata: 'https://static.tildacdn.com/tild3562-3631-4763-b334-663139396362/-1.png',
postparts: [{"partuid":"310102730381","parttitle":"Service mesh","parturl":"https:\/\/slurm.io\/blog#!\/tfeeds\/784947206928\/c\/Service mesh"}]
};
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('2021-07-07 10:53'); // 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>