Оригинал статьи на английскомKafka повсюду. Где есть микросервисы и распределенные вычисления, а они сейчас популярны, там почти наверняка есть и Kafka. В статье я попытаюсь объяснить, как в Kafka работает механизм хранения.
Я, конечно, постарался не усложнять, но копать будем глубоко, поэтому какое-то базовое представление о Kafka не помешает. Иначе не все будет понятно. В общем, продолжайте читать на свой страх и риск.
Дисклеймер от Слёрм. Если вы хотите быстро изучить Apache Kafka и получить обширные знания от экспертов в этой области, Слёрм подготовил курс Apache Kafka База.Обычно считается, что Kafka — это
распределенная и реплицированная очередь сообщений. С технической точки зрения все верно, но термин
очередь сообщений не все понимают одинаково. Я предпочитаю другое определение:
распределенный и реплицированный журнал коммитов. Эта формулировка кажется более точной, ведь мы все прекрасно знаем, как журналы записываются на диск. Просто в этом случае на диск попадают сообщения, отправленные в Kafka.
Применительно к хранению в Kafka используется два термина: партиции и топики. Партиции — это единицы хранения сообщений, а топики — что-то вроде контейнеров, в которых эти партиции находятся.
С основной теорией мы определились, давайте перейдем к практике.
Я создам в Kafka топик с тремя партициями. Если хотите повторять за мной, вот как выглядит команда для локальной настройки Kafka в Windows.
kafka-topics.bat --create --topic freblogg --partitions 3 --replication-factor 1 --zookeeper localhost:2181
В каталоге журналов Kafka создано три каталога:
$ tree freblogg*
freblogg-0
|-- 00000000000000000000.index
|-- 00000000000000000000.log
|-- 00000000000000000000.timeindex
`-- leader-epoch-checkpoint
freblogg-1
|-- 00000000000000000000.index
|-- 00000000000000000000.log
|-- 00000000000000000000.timeindex
`-- leader-epoch-checkpoint
freblogg-2
|-- 00000000000000000000.index
|-- 00000000000000000000.log
|-- 00000000000000000000.timeindex
`-- leader-epoch-checkpoint
Мы создали в топике три партиции, и у каждой — свой каталог в файловой системе. Еще тут есть несколько файлов (index, log и т д.), но о них чуть позже.
Обратите внимание, что в Kafka топик — это логическое объединение, а партиция — фактическая единица хранения. То, что физически хранится на диске. Как устроены партиции?
Партиции
В теории партиция — это неизменяемая коллекция (или последовательность) сообщений. Мы можем добавлять сообщения в партицию, но не можем удалять. И под «мы» я подразумеваю продюсеров в Kafka. Продюсер не может удалять сообщения из топика.
Сейчас мы отправим в топик пару сообщений, но сначала обратите внимание на размер файлов в папках партиций.
$ ls -lh freblogg-0
total 20M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint
Как видите, файлы index вместе весят 20 МБ, а файл log совершенно пустой. В папках freblogg-1 и freblogg-2 то же самое.
Давайте отправим сообщения через console producer и посмотрим, что будет:
kafka-console-producer.bat --topic freblogg --broker-list localhost:9092
Я отправил два сообщения — сначала ввел стандартное «Hello World», а потом нажал на Enter, и это второе сообщение. Еще раз посмотрим на размеры файлов:
$ ls -lh freblogg*
freblogg-0:
total 20M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint
freblogg-1:
total 21M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 68 Aug 5 10:15 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 11 Aug 5 10:15 leader-epoch-checkpoint
freblogg-2:
total 21M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 79 Aug 5 09:59 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 11 Aug 5 09:59 leader-epoch-checkpoint
Два сообщения заняли две партиции, и файлы log в них теперь имеют размер. Это потому, что сообщения в партиции хранятся в файле xxxx.log. Давайте заглянем в файл log и убедимся, что сообщение и правда там.
$ cat freblogg-2/*.log
@^@^B°£æÃ^@^K^Xÿÿÿÿÿÿ^@^@^@^A"^@^@^A^VHello World^@
Файлы с форматом log не очень удобно читать, но мы все же видим в конце «Hello World», то есть файл обновился, когда мы отправили сообщение в топик. Второе сообщение мы отправили в другую партицию.
Обратите внимание, что первое сообщение попало в третью партицию (freblogg-2), а второе — во вторую (freblogg-1). Для первого сообщения Kafka выбирает партицию произвольно, а следующие просто распределяет по кругу (round-robin). Если мы отправим третье сообщение, Kafka запишет его во freblogg-0 и дальше будет придерживаться этого порядка. Мы можем и сами выбирать партицию, указав ключ. Kafka хранит все сообщения с одним ключом в одной и той же партиции.
Каждому новому сообщению в партиции присваивается Id на 1 больше предыдущего. Этот Id еще называют смещением (offset). У первого сообщения смещение 0, у второго — 1 и т. д., каждое следующее всегда на 1 больше предыдущего.
<Небольшое отступление>
Давайте используем инструмент Kafka, чтобы понять, что это за странные символы в файле log. Нам они кажутся бессмысленными, но для Kafka это метаданные каждого сообщения в очереди. Выполним команду:
kafka-run-class.bat kafka.tools.DumpLogSegments --deep-iteration --print-data-log --files logs\freblogg-2\00000000000000000000.log
Получим результат:
umping logs\freblogg-2\00000000000000000000.log
Starting offset: 0
offset: 0 position: 0 CreateTime: 1533443377944 isvalid: true keysize: -1 valuesize: 11 producerId: -1 headerKeys: [] payload: Hello World
offset: 1 position: 79 CreateTime: 1533462689974 isvalid: true keysize: -1 valuesize: 6 producerId: -1 headerKeys: [] payload: amazon
(Я удалил из выходных данных кое-что лишнее.)
Здесь мы видим смещение, время создания, размер ключа и значения, а еще само сообщение (payload).
</Небольшое отступление>
Надо понимать, что
партиция привязана к брокеру. Если у нас, допустим, три брокера, а папка freblogg-0 существует в broker-1, в других брокерах ее не будет. У одного топика могут быть партиции в нескольких брокерах, но одна партиция всегда существует в одном брокере Kafka (если установлен коэффициент репликации по умолчанию 1, но об этом чуть позже).
Сегменты
Что это за файлы index и log в каталоге партиции? Партиция, может, и единица хранения в Kafka, но не минимальная. Каждая партиция разделена на
сегменты, то есть коллекции сообщений. Kafka не хранит все сообщения партиции в одном файле (как в файле лога), а разделяет их на сегменты. Это дает несколько преимуществ. (Разделяй и властвуй, как говорится.)
Главное — это упрощает стирание данных. Я уже говорил, что сами мы не можем удалить сообщение из партиции, но Kafka может это сделать на основе политики хранения для топика. Удалить сегмент проще, чем часть файла, особенно когда продюсер отправляет в него данные.
$ ls -lh freblogg-0
total 20M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint
Нули (00000000000000000000) в файлах log и index в каждой папке партиции — это имя сегмента. У файла сегмента есть файлы segment.log, segment.index и segment.timeindex.
Kafka всегда записывает сообщения в файлы сегментов в рамках партиции, причем у нас всегда есть активный сегмент для записи. Когда Kafka достигает лимита по размеру сегмента, создается новый файл сегмента, который станет активным.
В имени каждого файла сегмента отражается смещение от первого сообщения. На картинке выше в сегменте 0 содержатся сообщения со смещением от 0 до 2, в сегменте 3 — от 3 до 5, и так далее. Последний сегмент, шестой, сейчас активен.
$ ls -lh freblogg*
freblogg-0:
total 20M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint
freblogg-1:
total 21M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 68 Aug 5 10:15 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 11 Aug 5 10:15 leader-epoch-checkpoint
freblogg-2:
total 21M
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index
- freblogg 197121 79 Aug 5 09:59 00000000000000000000.log
- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex
- freblogg 197121 11 Aug 5 09:59 leader-epoch-checkpoint
У нас всего по одному сегменту в каждой партиции, поэтому они называются 00000000000000000000. Раз других файлов сегментов нет, сегмент 00000000000000000000 и будет активным.
По умолчанию сегменту выдается целый гигабайт, но представим, что мы изменили параметры, и теперь в каждый сегмент помещается только три сообщения. Посмотрим, что получится.
Допустим, мы отправили в партицию freblogg-2 три сообщения, и она выглядит так:
Три сообщения — это наш лимит. На следующем сообщении Kafka автоматически закроет текущий сегмент, создаст новый, сделает его активным и сохранит новое сообщение в файле log этого сегмента. (Я не показываю предыдущие нули, чтобы было проще воспринять).
freblogg-2
|-- 00.index
|-- 00.log
|-- 00.timeindex
|-- 03.index
|-- 03.log
|-- 03.timeindex
`--
Удивительное дело, но новый сегмент называется не 01. Мы видим 03.index, 03.log. Почему так?
Kafka называет сегмент по имени минимального смещения в нем. Новое сообщение в партиции имеет смещение 3, поэтому Kafka так и называет новый сегмент. Раз у нас есть сегменты 00 и 03, мы можем быть уверены, что сообщения со смещениями 0, 1 и 2 и правда находятся в сегменте 00. Новые сообщения в партиции freblogg-2 со смещениями 3 ,4 и 5 будут храниться в сегменте 03.
В Kafka мы часто читаем сообщения по определенному смещению. Искать смещение в файле log затратно, особенно если файл разрастается до неприличных размеров (по умолчанию это 1 ГБ). Для этого нам и нужен файл .index. В файле index хранятся смещения и физическое расположение сообщения в файле log.
Файл index для файла log, который я приводил в кратком отступлении, будет выглядеть как-то так:
Если нужно прочитать сообщение со смещением 1, мы ищем его в файле index и видим, что его положение — 79. Переходим к положению 79 в файле log и читаем. Это довольно эффективный способ — мы быстро находим нужное смещение в уже отсортированном файле index с помощью бинарного поиска.
Параллелизм в партициях
Чтобы гарантировать порядок чтения сообщений из партиции, Kafka дает доступ к партиции только одному консюмеру (из группы консюмеров). Если партиция получает сообщения a, f и k, консюмер читает их в том же порядке: a, f и k. Это важно, ведь
порядок потребления сообщений на уровне топика не гарантирован, если у вас несколько партиций.
Если консюмеров будет больше, параллелизм не увеличится. Нужно больше партиций. Чтобы два консюмера параллельно считывали данные из топика, нужно создать две партиции — по одной на каждого. Партиции в одном топике могут находиться в разных брокерах, поэтому два консюмера топика могут считывать данные из двух разных брокеров.
Топики
Наконец, переходим к топикам. Мы уже кое-что знаем о них. Главное, что нужно знать:
топик — это просто логическое объединение нескольких партиций.
Топик может быть распределен по нескольким брокерам через партиции, но каждая партиция находится только в одном брокере. У каждого топика есть уникальное имя, от которого зависят имена партиций.
Репликация
Как работает репликация? Создавая топик в Kafka, мы указываем для него коэффициент репликации — replication-factor. Допустим, у нас два брокера и мы устанавливаем replication-factor 2. Теперь Kafka попытается всегда создавать бэкап, или реплику, для каждой партиции в топике. Kafka распределяет партиции примерно так же, как HDFS распределяет блоки данных по нодам.
Допустим, для топика freblogg мы установили коэффициент репликации 2. Мы получим примерно такое распределение партиций:
Даже если реплицированная партиция находится в другом брокере, Kafka не разрешает ее читать, потому что в каждом наборе партиций есть LEADER, то есть лидер, и FOLLOWERS — ведомые, которые остаются в резерве. Ведомые периодически синхронизируются с лидером и ждут своего звездного часа. Когда лидер выйдет из строя, один из in-sync ведомых будет выбран новым лидером, и вы будете получать данные из этой партиции.
Лидер и ведомый одной партиции всегда находятся в разных брокерах. Думаю, не нужно объяснять, почему.
Мы подошли к концу этой длинной статьи. Если вы добрались до этого места — поздравляю. Теперь вы знаете почти все о хранении данных в Kafka. Давайте повторим, чтобы ничего не забыть.
Итоги
- В Kafka данные хранятся в топиках.
- Топики разделены на партиции.
- Каждая партиция разделена на сегменты.
- У каждого сегмента есть файл log, где хранится само сообщение, и файл index, где хранится позиция сообщения в файле log.
- У одного топика могут быть партиции в разных брокерах, но сама партиция всегда привязана к одному брокеру.
- Реплицированные партиции существуют пассивно. Вы обращаетесь к ним, только если сломался лидер.
От редакции:Более подробно от работе с Apache Kafka можно узнать на курсе Слёрма: Apache Kafka База.
Ресурсы:
→ Схема Kafka
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <!--metatextblock-->
<title>Практический взгляд на хранение в Apache Kafka | Блог slurm.io</title>
<meta name="description" content="как в Kafka работает механизм хранения: топики и партиции | Блог slurm.io">
<meta name="keywords" content="">
<meta name="robots" content="index, follow" />
<meta property="og:title" content="Практический взгляд на хранение в Apache Kafka | Блог slurm.io" />
<meta property="og:description" content="как в Kafka работает механизм хранения: топики и партиции | Блог slurm.io" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://slurm.io/blog/tpost/b9uf02mv31-prakticheskii-vzglyad-na-hranenie-v-kafk" />
<meta property="og:image" content="https://static.tildacdn.com/tild3365-3239-4161-b736-336336356162/qhx0a70cn0t3eio2hwjk.png" />
<link rel="canonical" href="https://slurm.io/blog/tpost/b9uf02mv31-prakticheskii-vzglyad-na-hranenie-v-kafk" />
<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/b9uf02mv31-prakticheskii-vzglyad-na-hranenie-v-kafk?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=1771495720" 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=1771495720" 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=1771495720" onerror="this.loaderr='y';"></script><script src="https://static.tildacdn.com/ws/project705564/tilda-blocks-page13176281.min.js?t=1771495720" 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="b9uf02mv31" 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="2020-12-29MSK05:51:00+03:00" />
<meta itemprop="dateModified" content="2025-03-27MSK16:10:08+03:00" />
<meta itemprop="mainEntityOfPage" content="https://slurm.io/blog/tpost/b9uf02mv31-prakticheskii-vzglyad-na-hranenie-v-kafk" />
<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">Практический взгляд на хранение в Kafka</h1>
</div>
<div id="feed-cover" class="r t-feed__post-popup__cover-wrapper t-feed__post-popup__cover-wrapper_aftertitle">
<img itemprop="image" src="https://static.tildacdn.com/tild3365-3239-4161-b736-336336356162/qhx0a70cn0t3eio2hwjk.png" class="js-feed-post-image t-feed__post-popup__img t-img">
</div>
<div id="feed-text" class="r t-feed__post-popup__text-wrapper" data-animationappear="off">
<div itemprop="articleBody" class="js-feed-post-text t-feed__post-popup__text t-text t-text_md"><section><a href="https://medium.com/@durgaswaroop/a-practical-introduction-to-kafka-storage-internals-d5b544f6925f">Оригинал статьи на английском</a><br />Kafka повсюду. Где есть микросервисы и распределенные вычисления, а они сейчас популярны, там почти наверняка есть и Kafka. В статье я попытаюсь объяснить, как в Kafka работает механизм хранения.<br /><br />Я, конечно, постарался не усложнять, но копать будем глубоко, поэтому какое-то базовое представление о Kafka не помешает. Иначе не все будет понятно. В общем, продолжайте читать на свой страх и риск.<br /><br /><figure contenteditable="false"><hr /></figure><strong>Дисклеймер от Слёрм. Если вы хотите быстро изучить Apache Kafka и получить обширные знания от экспертов в этой области, Слёрм подготовил курс </strong><a href="https://slurm.io/kafka?utm_source=blog&utm_medium=slurm&utm_campaign=kafka-ops&utm_content=article_29-12-2020" target="_blank" rel="noreferrer noopener"><strong><u>Apache Kafka База</u></strong></a><strong>.</strong><br /><figure contenteditable="false"><hr /></figure><br />Обычно считается, что Kafka — это <em>распределенная и реплицированная очередь сообщений</em>. С технической точки зрения все верно, но термин <em>очередь сообщений</em> не все понимают одинаково. Я предпочитаю другое определение: <strong>распределенный и реплицированный журнал коммитов</strong>. Эта формулировка кажется более точной, ведь мы все прекрасно знаем, как журналы записываются на диск. Просто в этом случае на диск попадают сообщения, отправленные в Kafka.<br /><figure data-alt="" data-src="https://static.tildacdn.com/tild3765-3135-4739-b463-353262376635/mfq2m7_-itlebj0vgyny.png" contenteditable="false"><img src="https://static.tildacdn.com/tild3765-3135-4739-b463-353262376635/mfq2m7_-itlebj0vgyny.png" alt="" /></figure><br /><br />Применительно к хранению в Kafka используется два термина: партиции и топики. <strong><em>Партиции</em></strong> — это единицы хранения сообщений, а <strong><em>топики</em></strong> — что-то вроде контейнеров, в которых эти партиции находятся.<br /><br />С основной теорией мы определились, давайте перейдем к практике.<br /><br />Я создам в Kafka топик с тремя партициями. Если хотите повторять за мной, вот как выглядит команда для локальной настройки Kafka в Windows.<br /><br /><span style="color: rgb(56, 58, 66);">kafka-topics.bat --create --topic freblogg --partitions 3 --replication-factor 1 --zookeeper localhost:2181</span><br /><br />В каталоге журналов Kafka создано три каталога:<br /><br /><span style="color: rgb(56, 58, 66);">$ tree freblogg*</span><br /><span style="color: rgb(56, 58, 66);">freblogg-0</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">`-- leader-epoch-checkpoint</span><br /><span style="color: rgb(56, 58, 66);">freblogg-1</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">`-- leader-epoch-checkpoint</span><br /><span style="color: rgb(56, 58, 66);">freblogg-2</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">|-- 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">`-- leader-epoch-checkpoint</span><br /><br />Мы создали в топике три партиции, и у каждой — свой каталог в файловой системе. Еще тут есть несколько файлов (<em>index, log и т д.</em>), но о них чуть позже.<br /><br />Обратите внимание, что в Kafka <strong>топик </strong>— это логическое объединение, а <strong>партиция — фактическая единица хранения</strong>. То, что физически хранится на диске. Как устроены партиции?<br /><br /><h2 class="t-redactor__h2">Партиции</h2><br />В теории партиция — это неизменяемая коллекция (или последовательность) сообщений. Мы можем добавлять сообщения в партицию, но не можем удалять. И под «мы» я подразумеваю продюсеров в Kafka. Продюсер не может удалять сообщения из топика.<br /><br />Сейчас мы отправим в топик пару сообщений, но сначала обратите внимание на размер файлов в папках партиций.<br /><br /><span style="color: rgb(56, 58, 66);">$ ls -lh freblogg-0</span><br /><span style="color: rgb(56, 58, 66);">total 20M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint</span><br /><br />Как видите, файлы index вместе весят 20 МБ, а файл log совершенно пустой. В папках freblogg-1 и freblogg-2 то же самое.<br />Давайте отправим сообщения через console producer и посмотрим, что будет:<br /><br /><span style="color: rgb(56, 58, 66);">kafka-console-producer.bat --topic freblogg --broker-list localhost:9092</span><br /><br />Я отправил два сообщения — сначала ввел стандартное «Hello World», а потом нажал на Enter, и это второе сообщение. Еще раз посмотрим на размеры файлов:<br /><br /><span style="color: rgb(56, 58, 66);">$ ls -lh freblogg*</span><br /><span style="color: rgb(56, 58, 66);">freblogg-0:</span><br /><span style="color: rgb(56, 58, 66);">total 20M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint</span><br /><br /><span style="color: rgb(56, 58, 66);">freblogg-1:</span><br /><span style="color: rgb(56, 58, 66);">total 21M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 68 Aug 5 10:15 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 11 Aug 5 10:15 leader-epoch-checkpoint</span><br /><br /><span style="color: rgb(56, 58, 66);">freblogg-2:</span><br /><span style="color: rgb(56, 58, 66);">total 21M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 79 Aug 5 09:59 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 11 Aug 5 09:59 leader-epoch-checkpoint</span><br /><br />Два сообщения заняли две партиции, и файлы log в них теперь имеют размер. Это потому, что <strong>сообщения в партиции хранятся в файле xxxx.log</strong>. Давайте заглянем в файл log и убедимся, что сообщение и правда там.<br /><br /><span style="color: rgb(56, 58, 66);">$ cat freblogg-2/*.log</span><br /><span style="color: rgb(56, 58, 66);">@^@^B°£æÃ^@^K^Xÿÿÿÿÿÿ^@^@^@^A"^@^@^A^VHello World^@</span><br /><br />Файлы с форматом log не очень удобно читать, но мы все же видим в конце «Hello World», то есть файл обновился, когда мы отправили сообщение в топик. Второе сообщение мы отправили в другую партицию.<br /><br />Обратите внимание, что первое сообщение попало в третью партицию (freblogg-2), а второе — во вторую (freblogg-1). Для первого сообщения Kafka выбирает партицию произвольно, а следующие просто распределяет по кругу (round-robin). Если мы отправим третье сообщение, Kafka запишет его во freblogg-0 и дальше будет придерживаться этого порядка. Мы можем и сами выбирать партицию, указав ключ. Kafka хранит все сообщения с одним ключом в одной и той же партиции.<br /><br />Каждому новому сообщению в партиции присваивается Id на 1 больше предыдущего. Этот Id еще называют <em>смещением (offset)</em>. У первого сообщения смещение 0, у второго — 1 и т. д., каждое следующее всегда на 1 больше предыдущего.<br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild6538-3863-4835-b236-353635353836/1zdwgeou55soug0eu_m_.png" contenteditable="false"><img src="https://static.tildacdn.com/tild6538-3863-4835-b236-353635353836/1zdwgeou55soug0eu_m_.png" alt="" /></figure><br /><br /><br /><h2 class="t-redactor__h2"><Небольшое отступление></h2><br />Давайте используем инструмент Kafka, чтобы понять, что это за странные символы в файле log. Нам они кажутся бессмысленными, но для Kafka это метаданные каждого сообщения в очереди. Выполним команду:<br /><br /><span style="color: rgb(56, 58, 66);">kafka-run-class.bat kafka.tools.DumpLogSegments --deep-iteration --print-data-log --files logs\freblogg-2\00000000000000000000.log</span><br /><br />Получим результат:<br /><br /><span style="color: rgb(56, 58, 66);">umping logs\freblogg-2\00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">Starting offset: 0</span><br /><br /><span style="color: rgb(56, 58, 66);">offset: 0 position: 0 CreateTime: 1533443377944 isvalid: true keysize: -1 valuesize: 11 producerId: -1 headerKeys: [] payload: Hello World</span><br /><br /><span style="color: rgb(56, 58, 66);">offset: 1 position: 79 CreateTime: 1533462689974 isvalid: true keysize: -1 valuesize: 6 producerId: -1 headerKeys: [] payload: amazon</span><br /><br />(Я удалил из выходных данных кое-что лишнее.)<br /><br />Здесь мы видим <strong>смещение, время создания, размер ключа и значения</strong>, а еще само сообщение (payload).<br /><br /><h2 class="t-redactor__h2"></Небольшое отступление></h2><br />Надо понимать, что<strong> партиция привязана к брокеру</strong>. Если у нас, допустим, три брокера, а папка freblogg-0 существует в broker-1, в других брокерах ее не будет. У одного топика могут быть партиции в нескольких брокерах, но одна партиция всегда существует в одном брокере Kafka (если установлен коэффициент репликации по умолчанию 1, но об этом чуть позже).<br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild6230-3638-4538-b862-393430666164/_7dfr9wqcwnl4otqms4u.png" contenteditable="false"><img src="https://static.tildacdn.com/tild6230-3638-4538-b862-393430666164/_7dfr9wqcwnl4otqms4u.png" alt="" /></figure><br /><br /><h2 class="t-redactor__h2">Сегменты</h2><br />Что это за файлы index и log в каталоге партиции? Партиция, может, и единица хранения в Kafka, но не минимальная. Каждая партиция разделена на <strong>сегменты</strong>, то есть коллекции сообщений. Kafka не хранит все сообщения партиции в одном файле (как в файле лога), а разделяет их на сегменты. Это дает несколько преимуществ. (Разделяй и властвуй, как говорится.)<br /><br />Главное — это упрощает стирание данных. Я уже говорил, что сами мы не можем удалить сообщение из партиции, но Kafka может это сделать на основе политики хранения для топика. Удалить сегмент проще, чем часть файла, особенно когда продюсер отправляет в него данные.<br /><br /><span style="color: rgb(56, 58, 66);">$ ls -lh freblogg-0</span><br /><span style="color: rgb(56, 58, 66);">total 20M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint</span><br /><br />Нули (00000000000000000000) в файлах log и index в каждой папке партиции — это имя сегмента. У файла сегмента есть файлы segment.log, segment.index и segment.timeindex.<br /><br />Kafka всегда записывает сообщения в файлы сегментов в рамках партиции, причем у нас всегда есть <em>активный</em> сегмент для записи. Когда Kafka достигает лимита по размеру сегмента, создается новый файл сегмента, который станет активным.<br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild6338-6165-4131-a263-656635663832/vahhqe2gwhdxkqru_buu.png" contenteditable="false"><img src="https://static.tildacdn.com/tild6338-6165-4131-a263-656635663832/vahhqe2gwhdxkqru_buu.png" alt="" /></figure><br />В имени каждого файла сегмента отражается смещение от первого сообщения. На картинке выше в сегменте 0 содержатся сообщения со смещением от 0 до 2, в сегменте 3 — от 3 до 5, и так далее. Последний сегмент, шестой, сейчас активен.<br /><br /><span style="color: rgb(56, 58, 66);">$ ls -lh freblogg*</span><br /><span style="color: rgb(56, 58, 66);">freblogg-0:</span><br /><span style="color: rgb(56, 58, 66);">total 20M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 0 Aug 5 08:26 leader-epoch-checkpoint</span><br /><br /><span style="color: rgb(56, 58, 66);">freblogg-1:</span><br /><span style="color: rgb(56, 58, 66);">total 21M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 68 Aug 5 10:15 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 11 Aug 5 10:15 leader-epoch-checkpoint</span><br /><br /><span style="color: rgb(56, 58, 66);">freblogg-2:</span><br /><span style="color: rgb(56, 58, 66);">total 21M</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.index</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 79 Aug 5 09:59 00000000000000000000.log</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 10M Aug 5 08:26 00000000000000000000.timeindex</span><br /><span style="color: rgb(56, 58, 66);">- freblogg 197121 11 Aug 5 09:59 leader-epoch-checkpoint</span><br /><br />У нас всего по одному сегменту в каждой партиции, поэтому они называются 00000000000000000000. Раз других файлов сегментов нет, сегмент 00000000000000000000 и будет активным.<br /><br />По умолчанию сегменту выдается целый гигабайт, но представим, что мы изменили параметры, и теперь в каждый сегмент помещается только три сообщения. Посмотрим, что получится.<br /><br />Допустим, мы отправили в партицию freblogg-2 три сообщения, и она выглядит так:<br /><figure data-alt="" data-src="https://static.tildacdn.com/tild3236-3334-4032-b165-366135333237/lgcuqs3epnz0m8zoidqr.png" contenteditable="false"><img src="https://static.tildacdn.com/tild3236-3334-4032-b165-366135333237/lgcuqs3epnz0m8zoidqr.png" alt="" /></figure><br /><br />Три сообщения — это наш лимит. На следующем сообщении Kafka автоматически закроет текущий сегмент, создаст новый, сделает его активным и сохранит новое сообщение в файле log этого сегмента. (Я не показываю предыдущие нули, чтобы было проще воспринять).<br /><br /><span style="color: rgb(56, 58, 66);">freblogg-2</span><br /><span style="color: rgb(56, 58, 66);">|-- 00.index</span><br /><span style="color: rgb(56, 58, 66);">|-- 00.log</span><br /><span style="color: rgb(56, 58, 66);">|-- 00.timeindex</span><br /><span style="color: rgb(56, 58, 66);">|-- 03.index</span><br /><span style="color: rgb(56, 58, 66);">|-- 03.log</span><br /><span style="color: rgb(56, 58, 66);">|-- 03.timeindex</span><br /><span style="color: rgb(56, 58, 66);">`--</span><br /><br />Удивительное дело, но новый сегмент называется не 01. Мы видим 03.index, 03.log. Почему так?<br /><figure data-alt="" data-src="https://static.tildacdn.com/tild6430-6637-4631-b466-356437343535/shmwmqdf81vcqsmbdho_.png" contenteditable="false"><img src="https://static.tildacdn.com/tild6430-6637-4631-b466-356437343535/shmwmqdf81vcqsmbdho_.png" alt="" /></figure><br />Kafka называет сегмент по имени минимального смещения в нем. Новое сообщение в партиции имеет смещение 3, поэтому Kafka так и называет новый сегмент. Раз у нас есть сегменты 00 и 03, мы можем быть уверены, что сообщения со смещениями 0, 1 и 2 и правда находятся в сегменте 00. Новые сообщения в партиции freblogg-2 со смещениями 3 ,4 и 5 будут храниться в сегменте 03.<br /><br />В Kafka мы часто читаем сообщения по определенному смещению. Искать смещение в файле log затратно, особенно если файл разрастается до неприличных размеров (по умолчанию это 1 ГБ). Для этого нам и нужен файл .index. <strong>В файле index хранятся смещения и физическое расположение сообщения в файле log.</strong><br /><br />Файл index для файла log, который я приводил в кратком отступлении, будет выглядеть как-то так:<br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild3364-3734-4832-a432-613761323834/tmhocwn0giruofl_xyyx.png" contenteditable="false"><img src="https://static.tildacdn.com/tild3364-3734-4832-a432-613761323834/tmhocwn0giruofl_xyyx.png" alt="" /></figure><br /><br />Если нужно прочитать сообщение со смещением 1, мы ищем его в файле index и видим, что его положение — 79. Переходим к положению 79 в файле log и читаем. Это довольно эффективный способ — мы быстро находим нужное смещение в уже отсортированном файле index с помощью бинарного поиска.<br /><br /><h2 class="t-redactor__h2">Параллелизм в партициях</h2><br />Чтобы гарантировать порядок чтения сообщений из партиции, Kafka дает доступ к партиции только одному консюмеру (из группы консюмеров). Если партиция получает сообщения a, f и k, консюмер читает их в том же порядке: a, f и k. Это важно, ведь <strong>порядок потребления сообщений на уровне топика не гарантирован</strong>, если у вас несколько партиций.<br /><br />Если консюмеров будет больше, параллелизм не увеличится. Нужно больше партиций. Чтобы два консюмера параллельно считывали данные из топика, нужно создать две партиции — по одной на каждого. Партиции в одном топике могут находиться в разных брокерах, поэтому два консюмера топика могут считывать данные из двух разных брокеров.<br /><br /><h2 class="t-redactor__h2">Топики</h2><br />Наконец, переходим к топикам. Мы уже кое-что знаем о них. Главное, что нужно знать: <strong>топик — это просто логическое объединение нескольких партиций</strong>.<br /><br />Топик может быть распределен по нескольким брокерам через партиции, но каждая партиция находится только в одном брокере. У каждого топика есть уникальное имя, от которого зависят имена партиций.<br /><br /><h2 class="t-redactor__h2">Репликация</h2><br />Как работает репликация? Создавая топик в Kafka, мы указываем для него коэффициент репликации — replication-factor. Допустим, у нас два брокера и мы устанавливаем replication-factor 2. Теперь Kafka попытается всегда создавать бэкап, или реплику, для каждой партиции в топике. Kafka распределяет партиции примерно так же, как HDFS распределяет блоки данных по нодам.<br /><br />Допустим, для топика freblogg мы установили коэффициент репликации 2. Мы получим примерно такое распределение партиций:<br /><br /><figure data-alt="" data-src="https://static.tildacdn.com/tild3130-3832-4563-b964-346430376165/tmhocwn0giruofl_xyyx.png" contenteditable="false"><img src="https://static.tildacdn.com/tild3130-3832-4563-b964-346430376165/tmhocwn0giruofl_xyyx.png" alt="" /></figure><br /><br />Даже если реплицированная партиция находится в другом брокере, Kafka не разрешает ее читать, потому что в каждом наборе партиций есть LEADER, то есть лидер, и FOLLOWERS — ведомые, которые остаются в резерве. Ведомые периодически синхронизируются с лидером и ждут своего звездного часа. Когда лидер выйдет из строя, один из in-sync ведомых будет выбран новым лидером, и вы будете получать данные из этой партиции.<br /><br />Лидер и ведомый одной партиции всегда находятся в разных брокерах. Думаю, не нужно объяснять, почему.<br /><br />Мы подошли к концу этой длинной статьи. Если вы добрались до этого места — поздравляю. Теперь вы знаете почти все о хранении данных в Kafka. Давайте повторим, чтобы ничего не забыть.<br /><br /><h2 class="t-redactor__h2">Итоги</h2><br /><ul><li>В Kafka данные хранятся в топиках.</li><li>Топики разделены на партиции.</li><li>Каждая партиция разделена на сегменты.</li><li>У каждого сегмента есть файл log, где хранится само сообщение, и файл index, где хранится позиция сообщения в файле log.</li><li>У одного топика могут быть партиции в разных брокерах, но сама партиция всегда привязана к одному брокеру.</li><li>Реплицированные партиции существуют пассивно. Вы обращаетесь к ним, только если сломался лидер.</li></ul><br /><strong><em>От редакции:</em></strong><br /><em>Более подробно от работе с Apache Kafka можно узнать на курсе Слёрма:</em> <a href="https://slurm.io/kafka?utm_source=blog&utm_medium=slurm&utm_campaign=kafka-ops&utm_content=article_29-12-2020" target="_blank" rel="noreferrer noopener">Apache Kafka База</a>.<br /><br />Ресурсы:<br /><br />→ <a href="https://kafka.apache.org/images/kafka_diagram.png">Схема Kafka</a></section></div>
</div>
<a href="https://medium.com/@durgaswaroop/a-practical-introduction-to-kafka-storage-internals-d5b544f6925f" target="_blank" class="t-feed__post-popup__author-link" rel="author">
<div class="js-feed-post-author t-feed__post-popup__author-wrapper">
<span itemprop="author" class="js-feed-post-author-name t-feed__post-popup__author-name t-descr t-descr_xxs">Durga Swaroop Perla</span>
</div>
</a>
<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">2020-12-29 10:51</span>
</span>
<a href="https://slurm.io/blog#!/tfeeds/784947206928/c/Apache Kafka" class="t-feed__post-popup__tag"><span class="t-uptitle t-uptitle_xs" itemprop="about">Apache Kafka</span></a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<style type="text/css">
#rec560736642 .t-feed__post-popup__cover-wrapper .t-slds__bullet_active .t-slds__bullet_body,
#rec560736642 .t-feed__post-popup__cover-wrapper .t-slds__bullet:hover .t-slds__bullet_body {
background-color: #222 !important;
}
#rec560736642 .t-feed__post-popup__arrow-top {
position:fixed;
z-index:1;
bottom:20px;
left: 20px;
min-height:30px;
}
#rec560736642 .t-feed__post-popup__arrow-top svg path {
}
</style>
<script type="text/javascript">
$(document).ready(function(){
$('body').append('<script type="text\/javascript" src="https:\/\/static.tildacdn.com\/js\/ya-share.js" async="async" charset="utf-8"><\/script>');
var popup = $('.t-feed__post-popup');
t_onFuncLoad('t_feed_openShare', function () {
t_feed_openShare(popup);
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
window.tFeedPosts = {};
var recid = '560736642';
var opts = {
"feeduid": "784947206928",
"previewmode": "yes",
"align": "left",
"amountOfPosts": "",
"reverse": "desc",
"blocksInRow": "3",
"blocksClass": "t-feed__grid-col t-col t-col_4",
"blocksWidth": "360",
"colClass": "",
"prefixClass": "",
"vindent": "",
"dateFormat": "4",
"timeFormat": "",
"imageRatio": "75",
"hasOriginalAspectRatio": false,
"imageHeight": "",
"imageWidth": "",
"dateFilter": 'all',
"showPartAll": true,
"showImage": true,
"showShortDescr": true,
"showParts": false,
"showDate": false,
"hideFeedParts": false,
"parts_opts": {
"partsBgColor": "#ffffff",
"partsBorderSize": "1px",
"partsBorderColor": "#000000",
"align": "center"
},
"btnsAlign": false,
"colWithBg": {
"paddingSize": "",
"background": "",
"borderRadius": "",
"shadowSize": "",
"shadowOpacity": "",
"shadowSizeHover": "",
"shadowOpacityHover": "",
"shadowShiftyHover": ""
},
"separator": {
"height": "",
"color": "",
"opacity": "",
"hideSeparator": false
},
"btnAllPosts": {
"text": "",
"link": "",
"target": ""
},
"popup_opts": {
"popupBgColor": "#ffffff",
"overlayBgColorRgba": "rgba(255,255,255,1)",
"closeText": "",
"iconColor": "#000000",
"popupStat": "",
"titleColor": "",
"textColor": "",
"subtitleColor": "",
"datePos": "aftertext",
"partsPos": "aftertext",
"imagePos": "aftertitle",
"inTwoColumns": false,
"zoom": false,
"styleRelevants": "",
"methodRelevants": "random",
"titleRelevants": "",
"showRelevants": "",
"titleFontFamily": "",
"descrFontFamily": "",
"subtitleFontFamily": "",
"shareStyle": "t-feed__share_black-white",
"shareBg": "",
"isShare": false,
"shareServices": "",
"shareFBToken": "",
"showDate": false,
"bgSize": "cover"
},
"arrowtop_opts": {
"isShow": false,
"style": "",
"color": "",
"bottom": "",
"left": "",
"right": ""
},
"gallery": {
"control": "",
"arrowSize": "",
"arrowBorderSize": "",
"arrowColor": "",
"arrowColorHover": "",
"arrowBg": "",
"arrowBgHover": "",
"arrowBgOpacity": "",
"arrowBgOpacityHover": "",
"showBorder": "",
"dotsWidth": "",
"dotsBg": "",
"dotsActiveBg": "",
"dotsBorderSize": ""
},
"typo": {
"title": "color:#000000;font-family:'TildaSans';",
"descr": "font-family:'TildaSans';",
"subtitle": "font-family:'TildaSans';"
},
"amountOfSymbols": "",
"bbtnStyle": "color:#ffffff;background-color:#000000;border-radius:3px; -moz-border-radius:3px; -webkit-border-radius:3px;",
"btnStyle": "color:#000000;border:1px solid #000000;background-color:#ffffff;border-radius:5px; -moz-border-radius:5px; -webkit-border-radius:5px;",
"btnTextColor": "#000000",
"btnType": "",
"btnSize": "sm",
"btnText": "",
"btnReadMore": "",
"isHorizOnMob": false,
"itemsAnim": "",
"datePosPs": "beforetitle",
"partsPosPs": "beforetitle",
"imagePosPs": "beforetitle",
"datePos": "afterdescr",
"partsPos": "onimage",
"imagePos": "beforetitle"
};
var post = {
uid: 'b9uf02mv31',
date: '2020-12-29 10:51',
mediatype: 'image',
mediadata: 'https://static.tildacdn.com/tild3365-3239-4161-b736-336336356162/qhx0a70cn0t3eio2hwjk.png',
postparts: [{"partuid":"246382447981","parttitle":"Apache Kafka","parturl":"https:\/\/slurm.io\/blog#!\/tfeeds\/784947206928\/c\/Apache Kafka"}]
};
t_onFuncLoad('t_feed_PostInit', function() {
t_feed_PostInit(recid, opts, post);
});
t_onFuncLoad('t_feed__drawPostPopupVideo', function() {
var postVideoHtml = t_feed__drawPostPopupVideo(post);
$('.js-feed-cover-video').html(postVideoHtml);
});
t_feed_formateDate_snippet('2020-12-29 10:51'); // 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>