Repository: exadel-inc/esl
Pull request #2927 (2025-02-10 18:43:39)

fix(esl-event-listener): subscribe descriptors if the host is function/class
Closes:  #2926 

codeclimate[bot]: Code Climate has analyzed commit d8da9518 and detected **0 issues** on this pull request.

The test coverage on the diff in this pull request is **100.0%** (**50%** is the threshold).

This pull request will bring the total coverage in the repository to **63.4%** (**0.0%** change).

View more on [Code Climate](https://codeclimate.com/github/exadel-inc/esl/pull/2927).


Patch:
diff --git a/.commitlintrc.yml b/.commitlintrc.yml
index 4b720ca8c..e5dce4e89 100644
--- a/.commitlintrc.yml
+++ b/.commitlintrc.yml
@@ -41,6 +41,7 @@ rules:
       - esl-forms
       - esl-image
       - esl-image-utils
+      - esl-lazy-template
       - esl-media
       - esl-media-query
       - esl-mixin-element
diff --git a/eslint-config/package.json b/eslint-config/package.json
index c43ed0f64..dd3354216 100644
--- a/eslint-config/package.json
+++ b/eslint-config/package.json
@@ -28,7 +28,7 @@
     "eslint-plugin-import-x": "^4.6.1",
     "eslint-plugin-sonarjs": "^1.0.4",
     "eslint-plugin-tsdoc": "^0.4.0",
-    "typescript-eslint": "^8.23.0"
+    "typescript-eslint": "^8.24.0"
   },
   "peerDependencies": {
     "eslint": ">=9.0.0"
diff --git a/package-lock.json b/package-lock.json
index ade42ef55..8f7608b85 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -34,7 +34,7 @@
         "concurrently": "^9.1.2",
         "copyfiles": "^2.4.1",
         "cross-env": "^7.0.3",
-        "eslint": "^9.20.0",
+        "eslint": "^9.20.1",
         "foreach-cli": "^1.8.1",
         "husky": "^9.1.7",
         "jest": "^29.7.0",
@@ -42,7 +42,7 @@
         "kleur": "^4.1.5",
         "less": "^4.2.2",
         "lint-staged": "^15.4.3",
-        "postcss": "^8.5.1",
+        "postcss": "^8.5.2",
         "postcss-less": "^6.0.0",
         "prettier": "^3.5.0",
         "rimraf": "^6.0.1",
@@ -84,7 +84,7 @@
         "eslint-plugin-import-x": "^4.6.1",
         "eslint-plugin-sonarjs": "^1.0.4",
         "eslint-plugin-tsdoc": "^0.4.0",
-        "typescript-eslint": "^8.23.0"
+        "typescript-eslint": "^8.24.0"
       },
       "peerDependencies": {
         "eslint": ">=9.0.0"
@@ -4523,16 +4523,16 @@
       "license": "MIT"
     },
     "node_modules/@typescript-eslint/eslint-plugin": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.23.0.tgz",
-      "integrity": "sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.24.0.tgz",
+      "integrity": "sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==",
       "license": "MIT",
       "dependencies": {
         "@eslint-community/regexpp": "^4.10.0",
-        "@typescript-eslint/scope-manager": "8.23.0",
-        "@typescript-eslint/type-utils": "8.23.0",
-        "@typescript-eslint/utils": "8.23.0",
-        "@typescript-eslint/visitor-keys": "8.23.0",
+        "@typescript-eslint/scope-manager": "8.24.0",
+        "@typescript-eslint/type-utils": "8.24.0",
+        "@typescript-eslint/utils": "8.24.0",
+        "@typescript-eslint/visitor-keys": "8.24.0",
         "graphemer": "^1.4.0",
         "ignore": "^5.3.1",
         "natural-compare": "^1.4.0",
@@ -4552,15 +4552,15 @@
       }
     },
     "node_modules/@typescript-eslint/parser": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.23.0.tgz",
-      "integrity": "sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.24.0.tgz",
+      "integrity": "sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==",
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/scope-manager": "8.23.0",
-        "@typescript-eslint/types": "8.23.0",
-        "@typescript-eslint/typescript-estree": "8.23.0",
-        "@typescript-eslint/visitor-keys": "8.23.0",
+        "@typescript-eslint/scope-manager": "8.24.0",
+        "@typescript-eslint/types": "8.24.0",
+        "@typescript-eslint/typescript-estree": "8.24.0",
+        "@typescript-eslint/visitor-keys": "8.24.0",
         "debug": "^4.3.4"
       },
       "engines": {
@@ -4576,13 +4576,13 @@
       }
     },
     "node_modules/@typescript-eslint/scope-manager": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.23.0.tgz",
-      "integrity": "sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.24.0.tgz",
+      "integrity": "sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==",
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.23.0",
-        "@typescript-eslint/visitor-keys": "8.23.0"
+        "@typescript-eslint/types": "8.24.0",
+        "@typescript-eslint/visitor-keys": "8.24.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4593,13 +4593,13 @@
       }
     },
     "node_modules/@typescript-eslint/type-utils": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.23.0.tgz",
-      "integrity": "sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.24.0.tgz",
+      "integrity": "sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==",
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/typescript-estree": "8.23.0",
-        "@typescript-eslint/utils": "8.23.0",
+        "@typescript-eslint/typescript-estree": "8.24.0",
+        "@typescript-eslint/utils": "8.24.0",
         "debug": "^4.3.4",
         "ts-api-utils": "^2.0.1"
       },
@@ -4616,9 +4616,9 @@
       }
     },
     "node_modules/@typescript-eslint/types": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.23.0.tgz",
-      "integrity": "sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.24.0.tgz",
+      "integrity": "sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==",
       "license": "MIT",
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4629,13 +4629,13 @@
       }
     },
     "node_modules/@typescript-eslint/typescript-estree": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.23.0.tgz",
-      "integrity": "sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.24.0.tgz",
+      "integrity": "sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==",
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.23.0",
-        "@typescript-eslint/visitor-keys": "8.23.0",
+        "@typescript-eslint/types": "8.24.0",
+        "@typescript-eslint/visitor-keys": "8.24.0",
         "debug": "^4.3.4",
         "fast-glob": "^3.3.2",
         "is-glob": "^4.0.3",
@@ -4679,15 +4679,15 @@
       }
     },
     "node_modules/@typescript-eslint/utils": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.23.0.tgz",
-      "integrity": "sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.24.0.tgz",
+      "integrity": "sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==",
       "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.4.0",
-        "@typescript-eslint/scope-manager": "8.23.0",
-        "@typescript-eslint/types": "8.23.0",
-        "@typescript-eslint/typescript-estree": "8.23.0"
+        "@typescript-eslint/scope-manager": "8.24.0",
+        "@typescript-eslint/types": "8.24.0",
+        "@typescript-eslint/typescript-estree": "8.24.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4702,12 +4702,12 @@
       }
     },
     "node_modules/@typescript-eslint/visitor-keys": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.23.0.tgz",
-      "integrity": "sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.24.0.tgz",
+      "integrity": "sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==",
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/types": "8.23.0",
+        "@typescript-eslint/types": "8.24.0",
         "eslint-visitor-keys": "^4.2.0"
       },
       "engines": {
@@ -8516,9 +8516,10 @@
       }
     },
     "node_modules/eslint": {
-      "version": "9.20.0",
-      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.0.tgz",
-      "integrity": "sha512-aL4F8167Hg4IvsW89ejnpTwx+B/UQRzJPGgbIOl+4XqffWsahVVsLEWoZvnrVuwpWmnRd7XeXmQI1zlKcFDteA==",
+      "version": "9.20.1",
+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.20.1.tgz",
+      "integrity": "sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==",
+      "license": "MIT",
       "dependencies": {
         "@eslint-community/eslint-utils": "^4.2.0",
         "@eslint-community/regexpp": "^4.12.1",
@@ -19075,9 +19076,9 @@
       }
     },
     "node_modules/postcss": {
-      "version": "8.5.1",
-      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
-      "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
+      "version": "8.5.2",
+      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz",
+      "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==",
       "dev": true,
       "funding": [
         {
@@ -22892,14 +22893,14 @@
       }
     },
     "node_modules/typescript-eslint": {
-      "version": "8.23.0",
-      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.23.0.tgz",
-      "integrity": "sha512-/LBRo3HrXr5LxmrdYSOCvoAMm7p2jNizNfbIpCgvG4HMsnoprRUOce/+8VJ9BDYWW68rqIENE/haVLWPeFZBVQ==",
+      "version": "8.24.0",
+      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.24.0.tgz",
+      "integrity": "sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==",
       "license": "MIT",
       "dependencies": {
-        "@typescript-eslint/eslint-plugin": "8.23.0",
-        "@typescript-eslint/parser": "8.23.0",
-        "@typescript-eslint/utils": "8.23.0"
+        "@typescript-eslint/eslint-plugin": "8.24.0",
+        "@typescript-eslint/parser": "8.24.0",
+        "@typescript-eslint/utils": "8.24.0"
       },
       "engines": {
         "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
diff --git a/package.json b/package.json
index 87606c6c1..24bf57e86 100644
--- a/package.json
+++ b/package.json
@@ -110,7 +110,7 @@
     "concurrently": "^9.1.2",
     "copyfiles": "^2.4.1",
     "cross-env": "^7.0.3",
-    "eslint": "^9.20.0",
+    "eslint": "^9.20.1",
     "foreach-cli": "^1.8.1",
     "husky": "^9.1.7",
     "jest": "^29.7.0",
@@ -118,7 +118,7 @@
     "kleur": "^4.1.5",
     "less": "^4.2.2",
     "lint-staged": "^15.4.3",
-    "postcss": "^8.5.1",
+    "postcss": "^8.5.2",
     "postcss-less": "^6.0.0",
     "prettier": "^3.5.0",
     "rimraf": "^6.0.1",
diff --git a/site/src/esl-lazy-template-demo/distance-to-viewport-alert.ts b/site/src/esl-lazy-template-demo/distance-to-viewport-alert.ts
new file mode 100644
index 000000000..78ef4fe27
--- /dev/null
+++ b/site/src/esl-lazy-template-demo/distance-to-viewport-alert.ts
@@ -0,0 +1,47 @@
+import {ESLMixinElement} from '@exadel/esl/modules/esl-mixin-element/core';
+import {ready} from '@exadel/esl/modules/esl-utils/decorators';
+import {ESLEventUtils} from '@exadel/esl/modules/esl-utils/dom/events';
+import {Rect} from '@exadel/esl/modules/esl-utils/dom/rect';
+import {getWindowRect} from '@exadel/esl/modules/esl-utils/dom/window';
+import {getViewportForEl} from '@exadel/esl/modules/esl-utils/dom/scroll';
+
+export class ESLDemoDistanceToViewportAlert extends ESLMixinElement {
+  public static override is = 'distance-to-viewport-alert';
+
+  @ready
+  protected override connectedCallback(): void {
+    super.connectedCallback();
+    this.showAlert();
+  }
+
+  protected calculateDistance(): number {
+    let topDistance;
+    let bottomDistance;
+    const elementRect = Rect.from(this.$host.getBoundingClientRect());
+    const $root = getViewportForEl(this.$host) as HTMLElement;
+    if (!$root) { // window
+      const windowRect = getWindowRect();
+      topDistance = elementRect.top - windowRect.height;
+      bottomDistance = -elementRect.bottom;
+    } else {
+      const windowRect = Rect.from($root.getBoundingClientRect());
+      topDistance = elementRect.top - windowRect.bottom;
+      bottomDistance = -elementRect.bottom;
+    }
+    return Math.max(topDistance, bottomDistance);
+  }
+
+  protected showAlert(): void {
+    const distance = this.calculateDistance();
+    const text =  distance < 0
+      ? `The element with id="${this.$host.id}" was connected to DOM when it was in viewport`
+      : `The element with id="${this.$host.id}" was connected to DOM at the distance ${distance}px from the viewport`;
+
+    const detail = {
+      text,
+      cls: 'alert-info',
+      hideDelay: 5000
+    };
+    ESLEventUtils.dispatch(document.body, 'esl:alert:show', {detail});
+  }
+}
diff --git a/site/src/site.ts b/site/src/site.ts
index 0f854662e..35e0128fd 100644
--- a/site/src/site.ts
+++ b/site/src/site.ts
@@ -36,7 +36,6 @@ import {
   ESLAnimateMixin,
   ESLRelatedTarget,
   ESLOpenState,
-
   ESLCarousel,
   ESLCarouselNavDots,
   ESLCarouselNavMixin,
@@ -44,7 +43,8 @@ import {
   ESLCarouselWheelMixin,
   ESLCarouselKeyboardMixin,
   ESLCarouselRelateToMixin,
-  ESLCarouselAutoplayMixin
+  ESLCarouselAutoplayMixin,
+  ESLLazyTemplate
 } from '@exadel/esl/modules/all';
 
 import {ESLRandomText} from '@exadel/esl/modules/esl-random-text/core';
@@ -65,6 +65,7 @@ import {ESLDemoAnchorLink} from './anchor/anchor-link';
 import {ESLDemoBanner} from './banner/banner';
 import {ESLDemoSwipeArea, ESLDemoWheelArea} from './esl-events-demo/esl-events-demo';
 import {ESLDemoPopupGame} from './esl-popup/esl-d-popup-game';
+import {ESLDemoDistanceToViewportAlert} from './esl-lazy-template-demo/distance-to-viewport-alert';
 
 if (!CSS.supports('(height: 100dvh) or (width: 100dvw)')) ESLVSizeCSSProxy.observe();
 
@@ -81,6 +82,7 @@ ESLDemoBanner.register();
 ESLDemoSwipeArea.register();
 ESLDemoWheelArea.register();
 ESLDemoPopupGame.register();
+ESLDemoDistanceToViewportAlert.register();
 
 // Test Content
 ESLRandomText.register('lorem-ipsum');
@@ -136,6 +138,7 @@ ESLAnimateMixin.register();
 // Register ESL Mixins
 ESLRelatedTarget.register();
 ESLOpenState.register();
+ESLLazyTemplate.register();
 
 // Share component loading
 import(/* webpackChunkName: 'common/esl-share' */'./esl-share/esl-share');
diff --git a/site/static/assets/examples/lazy-template.svg b/site/static/assets/examples/lazy-template.svg
new file mode 100644
index 000000000..ce8ee5411
--- /dev/null
+++ b/site/static/assets/examples/lazy-template.svg
@@ -0,0 +1,1 @@
+<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 511 511"><path fill="#add1fa" d="m498.96 102.75-.08-.54-.03-.19a7.1 7.1 0 0 0-.15-.62l-.03-.09-.21-.6-.03-.09a7.14 7.14 0 0 0-.27-.55l-.05-.11a7.43 7.43 0 0 0-.29-.49l-.09-.14-.32-.44-.12-.15a7.72 7.72 0 0 0-.49-.55l-96-96a7.28 7.28 0 0 0-.54-.49l-.15-.1a7.28 7.28 0 0 0-.44-.33l-.15-.09a7.9 7.9 0 0 0-.48-.3l-.11-.05-.56-.26-.08-.03-.6-.21-.1-.03c-.2-.06-.4-.11-.61-.15l-.2-.03A7.23 7.23 0 0 0 395.5 0h-224A39.55 39.55 0 0 0 132 39.5V80H43.5A31.54 31.54 0 0 0 12 111.5v80A31.54 31.54 0 0 0 43.5 223H132v248.5a39.55 39.55 0 0 0 39.5 39.5h288a39.55 39.55 0 0 0 39.5-39.5v-368c0-.25-.01-.5-.04-.75zM403 25.61 473.4 96h-45.9C414 96 403 85 403 71.5V25.6zM27 191.5v-80c0-9.1 7.4-16.5 16.5-16.5h304c9.1 0 16.5 7.4 16.5 16.5v80c0 9.1-7.4 16.5-16.5 16.5h-304c-9.1 0-16.5-7.4-16.5-16.5zM459.5 496h-288c-13.5 0-24.5-11-24.5-24.5V223h200.5a31.54 31.54 0 0 0 31.5-31.5v-80A31.54 31.54 0 0 0 347.5 80H147V39.5C147 26 158 15 171.5 15H388v56.5a39.55 39.55 0 0 0 39.5 39.5H484v360.5c0 13.5-11 24.5-24.5 24.5z"/><path fill="#0082ca" d="M115.5 112a7.5 7.5 0 0 0-7.5 7.5V152H67v-32.5a7.5 7.5 0 0 0-15 0v64a7.5 7.5 0 0 0 15 0V167h41v16.5a7.5 7.5 0 0 0 15 0v-64a7.5 7.5 0 0 0-7.5-7.5zM211.5 191a7.5 7.5 0 0 0 7.5-7.5v-36.92l10.07 16.78a7.5 7.5 0 0 0 6.43 3.64h8a7.5 7.5 0 0 0 6.43-3.64L260 146.58v36.92a7.5 7.5 0 0 0 15 0v-64a7.5 7.5 0 0 0-13.93-3.86L239.5 151.6l-21.57-35.95A7.5 7.5 0 0 0 204 119.5v64a7.5 7.5 0 0 0 7.5 7.5zM139.5 127H156v56.5a7.5 7.5 0 0 0 15 0V127h16.5a7.5 7.5 0 0 0 0-15h-48a7.5 7.5 0 0 0 0 15zM299.5 191h40a7.5 7.5 0 0 0 0-15H307v-56.5a7.5 7.5 0 0 0-15 0v64a7.5 7.5 0 0 0 7.5 7.5zM341.87 280.38a7.5 7.5 0 0 0-9.48 4.75l-48 144a7.5 7.5 0 0 0 14.23 4.74l48-144a7.5 7.5 0 0 0-4.75-9.49zM272.8 298.2a7.5 7.5 0 0 0-10.6 0l-56 56a7.5 7.5 0 0 0 0 10.6l56 56a7.48 7.48 0 0 0 10.6 0 7.5 7.5 0 0 0 0-10.6l-50.7-50.7 50.7-50.7a7.5 7.5 0 0 0 0-10.6zM368.8 298.2a7.5 7.5 0 1 0-10.6 10.6l50.7 50.7-50.7 50.7a7.5 7.5 0 1 0 10.6 10.6l56-56a7.5 7.5 0 0 0 0-10.6l-56-56z"/></svg>
\ No newline at end of file
diff --git a/site/static/assets/lazy-templates/animated-geometric-shapes-background.svg b/site/static/assets/lazy-templates/animated-geometric-shapes-background.svg
new file mode 100644
index 000000000..ed7c34a1b
--- /dev/null
+++ b/site/static/assets/lazy-templates/animated-geometric-shapes-background.svg
@@ -0,0 +1,5 @@
+<svg id="ei7c3BszmJU1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 700 400" shape-rendering="geometricPrecision" text-rendering="geometricPrecision">
+<style><![CDATA[
+#ei7c3BszmJU33_to {animation: ei7c3BszmJU33_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU33_to__to { 0% {transform: translate(595.29538px,697.381287px)} 16.666667% {transform: translate(595.29538px,697.381287px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 33.333333% {transform: translate(908.782246px,516.800875px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 66.666667% {transform: translate(908.782246px,516.800875px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 83.333333% {transform: translate(595.29538px,697.381287px)} 100% {transform: translate(595.29538px,697.381287px)}} #ei7c3BszmJU35_to {animation: ei7c3BszmJU35_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU35_to__to { 0% {transform: translate(366.234986px,795.616272px)} 16.666667% {transform: translate(366.234986px,795.616272px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 33.333333% {transform: translate(366.234986px,856.88369px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 66.666667% {transform: translate(366.234986px,856.88369px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 83.333333% {transform: translate(366.234986px,795.616272px)} 100% {transform: translate(366.234986px,795.616272px)}} #ei7c3BszmJU39_to {animation: ei7c3BszmJU39_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU39_to__to { 0% {transform: translate(595.29538px,697.381287px)} 16.666667% {transform: translate(595.29538px,697.381287px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 33.333333% {transform: translate(908.782246px,516.800875px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 41.666667% {transform: translate(908.782246px,516.800875px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 50% {transform: translate(908.782246px,572.800875px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 58.333333% {transform: translate(908.782246px,516.800875px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 66.666667% {transform: translate(908.782246px,516.800875px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 83.333333% {transform: translate(595.29538px,697.381287px)} 100% {transform: translate(595.29538px,697.381287px)}} #ei7c3BszmJU40_to {animation: ei7c3BszmJU40_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU40_to__to { 0% {transform: translate(595.304993px,678.671875px)} 8.333333% {transform: translate(595.304993px,678.671875px);animation-timing-function: cubic-bezier(0.42,0,1,1)} 16.666667% {transform: translate(595.304993px,575.562168px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(595.304993px,575.562168px);animation-timing-function: cubic-bezier(0,0,0.58,1)} 91.666667% {transform: translate(595.304993px,678.671875px)} 100% {transform: translate(595.304993px,678.671875px)}} #ei7c3BszmJU41_to {animation: ei7c3BszmJU41_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU41_to__to { 0% {transform: translate(595.263123px,640.794373px)} 8.333333% {transform: translate(595.263123px,640.794373px);animation-timing-function: cubic-bezier(0.42,0,1,1)} 16.666667% {transform: translate(595.263123px,537.684665px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(595.263123px,537.684665px);animation-timing-function: cubic-bezier(0,0,0.58,1)} 91.666667% {transform: translate(595.263123px,640.794373px)} 100% {transform: translate(595.263123px,640.794373px)}} #ei7c3BszmJU42_to {animation: ei7c3BszmJU42_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU42_to__to { 0% {transform: translate(366.234986px,795.616272px)} 16.666667% {transform: translate(366.234986px,795.616272px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 33.333333% {transform: translate(366.234986px,856.88369px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 66.666667% {transform: translate(366.234986px,856.88369px);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 83.333333% {transform: translate(366.234986px,795.616272px)} 100% {transform: translate(366.234986px,795.616272px)}} #ei7c3BszmJU45_to {animation: ei7c3BszmJU45_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU45_to__to { 0% {offset-distance: 0%;animation-timing-function: cubic-bezier(0.42,0,1,1)} 14% {offset-distance: 14.107885%} 16.333333% {offset-distance: 16.370157%} 21.833333% {offset-distance: 21.829181%} 23.833333% {offset-distance: 23.828749%} 27.666667% {offset-distance: 27.690624%} 29.583333% {offset-distance: 29.549665%} 38.333333% {offset-distance: 38.26417%} 41.75% {offset-distance: 41.660949%} 47.166667% {offset-distance: 47.068187%} 51% {offset-distance: 50.846209%} 57.833333% {offset-distance: 57.681259%} 60% {offset-distance: 59.800367%} 69.75% {offset-distance: 69.510334%} 72% {offset-distance: 71.756854%} 75.916667% {offset-distance: 75.706575%} 78.166667% {offset-distance: 77.883615%} 84.666667% {offset-distance: 84.362248%} 86.833333% {offset-distance: 86.511546%} 97% {offset-distance: 96.683124%} 98.833333% {offset-distance: 98.489102%} 100% {offset-distance: 100%}} #ei7c3BszmJU50_ts {animation: ei7c3BszmJU50_ts__ts 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU50_ts__ts { 0% {transform: translate(1027.349976px,934.350006px) scale(1,1)} 20% {transform: translate(1027.349976px,934.350006px) scale(1,1)} 24.166667% {transform: translate(1027.349976px,934.350006px) scale(0.898707,0.898707)} 25% {transform: translate(1027.349976px,934.350006px) scale(0.898707,0.898707)} 29.166667% {transform: translate(1027.349976px,934.350006px) scale(1,1)} 70.833333% {transform: translate(1027.349976px,934.350006px) scale(1,1)} 75% {transform: translate(1027.349976px,934.350006px) scale(0.898707,0.898707)} 75.833333% {transform: translate(1027.349976px,934.350006px) scale(0.898707,0.898707)} 80% {transform: translate(1027.349976px,934.350006px) scale(1,1)} 100% {transform: translate(1027.349976px,934.350006px) scale(1,1)}} #ei7c3BszmJU50 {animation: ei7c3BszmJU50_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU50_c_o { 0% {opacity: 0} 16.666667% {opacity: 0;animation-timing-function: cubic-bezier(0.42,0,1,1)} 20.833333% {opacity: 0.5;animation-timing-function: cubic-bezier(0,0,0.58,1)} 28.333333% {opacity: 0.5;animation-timing-function: cubic-bezier(0.42,0,1,1)} 32.5% {opacity: 0;animation-timing-function: cubic-bezier(0,0,0.58,1)} 67.5% {opacity: 0;animation-timing-function: cubic-bezier(0.42,0,1,1)} 71.666667% {opacity: 0.5;animation-timing-function: cubic-bezier(0,0,0.58,1)} 79.166667% {opacity: 0.5;animation-timing-function: cubic-bezier(0.42,0,1,1)} 83.333333% {opacity: 0} 100% {opacity: 0}} #ei7c3BszmJU51_to {animation: ei7c3BszmJU51_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU51_to__to { 0% {transform: translate(1027.350006px,970.541345px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 25% {transform: translate(1027.350006px,772.757609px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(1027.350006px,970.541345px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 75% {transform: translate(1027.350006px,772.757609px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(1027.350006px,970.541345px)}} #ei7c3BszmJU61_to {animation: ei7c3BszmJU61_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU61_to__to { 0% {transform: translate(1166.002489px,-67.990439px)} 19.166667% {transform: translate(1166.002489px,-67.990439px);animation-timing-function: cubic-bezier(0.895,0.03,0.685,0.22)} 22.5% {transform: translate(1166.200948px,489.990421px)} 100% {transform: translate(1166.200948px,489.990421px)}} #ei7c3BszmJU61 {animation: ei7c3BszmJU61_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU61_c_o { 0% {opacity: 1} 22.5% {opacity: 1;animation-timing-function: step-end} 23.333333% {opacity: 0} 100% {opacity: 0}} #ei7c3BszmJU63_to {animation: ei7c3BszmJU63_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU63_to__to { 0% {transform: translate(1166.367065px,287.327729px)} 62.5% {transform: translate(1166.367065px,287.327729px);animation-timing-function: cubic-bezier(0.95,0.05,0.795,0.035)} 87.5% {transform: translate(1166.367066px,694.120147px)} 100% {transform: translate(1166.367066px,694.120147px)}} #ei7c3BszmJU66_ts {animation: ei7c3BszmJU66_ts__ts 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU66_ts__ts { 0% {transform: translate(1028.078631px,1115.461471px) scale(1,1)} 30% {transform: translate(1028.078631px,1115.461471px) scale(1,1)} 30.833333% {transform: translate(1028.078631px,1115.461471px) scale(0.898707,0.898707)} 31.666667% {transform: translate(1028.078631px,1115.461471px) scale(0.898707,0.898707)} 34.166667% {transform: translate(1028.078631px,1115.461471px) scale(1,1)} 100% {transform: translate(1028.078631px,1115.461471px) scale(1,1)}} #ei7c3BszmJU66 {animation: ei7c3BszmJU66_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU66_c_o { 0% {opacity: 0} 26.666667% {opacity: 0;animation-timing-function: cubic-bezier(0.42,0,1,1)} 30.833333% {opacity: 0.5} 100% {opacity: 0.5}} #ei7c3BszmJU67_to {animation: ei7c3BszmJU67_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU67_to__to { 0% {offset-distance: 0%} 22.5% {offset-distance: 0%;animation-timing-function: cubic-bezier(0.77,0,0.175,1)} 30.833333% {offset-distance: 68.490187%;animation-timing-function: cubic-bezier(0.77,0,0.175,1)} 31.666667% {offset-distance: 68.554346%;animation-timing-function: cubic-bezier(0.77,0,0.175,1)} 40% {offset-distance: 100%} 100% {offset-distance: 100%}} #ei7c3BszmJU68 {animation: ei7c3BszmJU68_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU68_c_o { 0% {opacity: 0} 22.5% {opacity: 0;animation-timing-function: step-end} 23.333333% {opacity: 1} 100% {opacity: 1}} #ei7c3BszmJU69 {animation: ei7c3BszmJU69_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU69_c_o { 0% {opacity: 0} 22.5% {opacity: 0;animation-timing-function: step-end} 23.333333% {opacity: 1} 100% {opacity: 1}} #ei7c3BszmJU70 {animation: ei7c3BszmJU70_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU70_c_o { 0% {opacity: 0} 22.5% {opacity: 0;animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 23.333333% {opacity: 1} 40% {opacity: 1} 100% {opacity: 1}} #ei7c3BszmJU77_to {animation: ei7c3BszmJU77_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU77_to__to { 0% {transform: translate(1642.87498px,41.782837px)} 54.166667% {transform: translate(1642.87498px,41.782837px);animation-timing-function: cubic-bezier(0.895,0.03,0.685,0.22)} 57.5% {transform: translate(1642.87498px,465.990421px)} 100% {transform: translate(1642.87498px,465.990421px)}} #ei7c3BszmJU82_to {animation: ei7c3BszmJU82_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU82_to__to { 0% {transform: translate(1642.87498px,41.557345px)} 58.333333% {transform: translate(1642.87498px,41.557345px);animation-timing-function: cubic-bezier(0.895,0.03,0.685,0.22)} 61.666667% {transform: translate(1642.87498px,329.990421px)} 100% {transform: translate(1642.87498px,329.990421px)}} #ei7c3BszmJU83 {animation: ei7c3BszmJU83_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU83_c_o { 0% {opacity: 1} 87.5% {opacity: 1;animation-timing-function: step-start} 88.333333% {opacity: 0} 100% {opacity: 0}} #ei7c3BszmJU84 {animation: ei7c3BszmJU84_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU84_c_o { 0% {opacity: 1} 87.5% {opacity: 1;animation-timing-function: step-start} 88.333333% {opacity: 0} 100% {opacity: 0}} #ei7c3BszmJU85 {animation: ei7c3BszmJU85_c_o 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU85_c_o { 0% {opacity: 1} 87.5% {opacity: 1} 88.333333% {opacity: 0} 100% {opacity: 0}} #ei7c3BszmJU90_to {animation: ei7c3BszmJU90_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU90_to__to { 0% {transform: translate(1552.91095px,929.650025px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 16.666667% {transform: translate(1552.91095px,865.492842px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 33.333333% {transform: translate(1552.91095px,929.650025px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(1552.91095px,865.492842px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(1552.91095px,929.650025px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(1552.91095px,865.492842px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(1552.91095px,929.650025px)}} #ei7c3BszmJU94_to {animation: ei7c3BszmJU94_to__to 12000ms linear infinite normal forwards}@keyframes ei7c3BszmJU94_to__to { 0% {transform: translate(2123.659254px,358.108233px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(1797.405px,546.363005px);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(2123.659254px,358.108233px)}}
+]]></style>
+<defs><linearGradient id="ei7c3BszmJU26-fill" x1="992.67" y1="394.54" x2="826.66" y2="394.54" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU26-fill-0" offset="0%" stop-color="#36b1ff"/><stop id="ei7c3BszmJU26-fill-1" offset="100%" stop-color="#338fe2"/></linearGradient><linearGradient id="ei7c3BszmJU27-fill" x1="975.23" y1="394.48" x2="844.09" y2="318.76" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU27-fill-0" offset="0%" stop-color="#36cdff"/><stop id="ei7c3BszmJU27-fill-1" offset="100%" stop-color="#40e6f9"/></linearGradient><linearGradient id="ei7c3BszmJU28-fill" x1="180" y1="-180" x2="1620" y2="1260" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU28-fill-0" offset="0%" stop-color="#452d4a"/><stop id="ei7c3BszmJU28-fill-1" offset="100%" stop-color="#28254f"/></linearGradient><linearGradient id="ei7c3BszmJU36-fill" x1="58.32" y1="944.09" x2="690.75" y2="578.95" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU36-fill-0" offset="0%" stop-color="#00abb7"/><stop id="ei7c3BszmJU36-fill-1" offset="100%" stop-color="#338fe2"/></linearGradient><linearGradient id="ei7c3BszmJU37-fill" x1="27.21" y1="1010.47" x2="718.11" y2="611.58" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU37-fill-0" offset="0%" stop-color="#00abb7"/><stop id="ei7c3BszmJU37-fill-1" offset="100%" stop-color="#00c997"/></linearGradient><linearGradient id="ei7c3BszmJU38-fill" x1="28.48" y1="968.6" x2="703.99" y2="578.59" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU38-fill-0" offset="0%" stop-color="#8ffe0c"/><stop id="ei7c3BszmJU38-fill-1" offset="100%" stop-color="#0ef269"/></linearGradient><linearGradient id="ei7c3BszmJU40-fill" x1="678.28" y1="678.7" x2="512.27" y2="678.7" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU40-fill-0" offset="0%" stop-color="#36b1ff"/><stop id="ei7c3BszmJU40-fill-1" offset="100%" stop-color="#338fe2"/></linearGradient><linearGradient id="ei7c3BszmJU41-fill" x1="660.84" y1="678.64" x2="529.7" y2="602.93" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU41-fill-0" offset="0%" stop-color="#36cdff"/><stop id="ei7c3BszmJU41-fill-1" offset="100%" stop-color="#40e6f9"/></linearGradient><linearGradient id="ei7c3BszmJU43-fill" x1="27.21" y1="1010.47" x2="718.11" y2="611.58" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU43-fill-0" offset="0%" stop-color="#00abb7"/><stop id="ei7c3BszmJU43-fill-1" offset="100%" stop-color="#00c997"/></linearGradient><linearGradient id="ei7c3BszmJU44-fill" x1="28.48" y1="968.6" x2="703.99" y2="578.59" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU44-fill-0" offset="0%" stop-color="#8ffe0c"/><stop id="ei7c3BszmJU44-fill-1" offset="100%" stop-color="#0ef269"/></linearGradient><linearGradient id="ei7c3BszmJU47-fill" x1="0" y1="25.12" x2="0" y2="-25.12" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU47-fill-0" offset="0%" stop-color="#dffe0a"/><stop id="ei7c3BszmJU47-fill-1" offset="0%" stop-color="#dffe0b"/><stop id="ei7c3BszmJU47-fill-2" offset="12%" stop-color="#cbfe43"/><stop id="ei7c3BszmJU47-fill-3" offset="24%" stop-color="#bbfe74"/><stop id="ei7c3BszmJU47-fill-4" offset="36%" stop-color="#acff9e"/><stop id="ei7c3BszmJU47-fill-5" offset="48%" stop-color="#a1ffc1"/><stop id="ei7c3BszmJU47-fill-6" offset="60%" stop-color="#98ffdb"/><stop id="ei7c3BszmJU47-fill-7" offset="73%" stop-color="#91ffee"/><stop id="ei7c3BszmJU47-fill-8" offset="86%" stop-color="#8dfff9"/><stop id="ei7c3BszmJU47-fill-9" offset="100%" stop-color="#8cfffd"/></linearGradient><linearGradient id="ei7c3BszmJU91-fill" x1="1645.93" y1="941.13" x2="1459.19" y2="941.13" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU91-fill-0" offset="0%" stop-color="#00abb7"/><stop id="ei7c3BszmJU91-fill-1" offset="100%" stop-color="#36cdff"/></linearGradient><linearGradient id="ei7c3BszmJU92-fill" x1="1703.69" y1="1008.1" x2="1402.09" y2="1008.1" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU92-fill-0" offset="0%" stop-color="#36cdff"/><stop id="ei7c3BszmJU92-fill-1" offset="90%" stop-color="#00abb7"/><stop id="ei7c3BszmJU92-fill-2" offset="93%" stop-color="#03adbb"/><stop id="ei7c3BszmJU92-fill-3" offset="95%" stop-color="#0cb2c7"/><stop id="ei7c3BszmJU92-fill-4" offset="97%" stop-color="#1bbcdb"/><stop id="ei7c3BszmJU92-fill-5" offset="99%" stop-color="#2fc9f6"/><stop id="ei7c3BszmJU92-fill-6" offset="100%" stop-color="#36cdff"/></linearGradient><linearGradient id="ei7c3BszmJU93-fill" x1="1703.58" y1="939.21" x2="1402.09" y2="939.21" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU93-fill-0" offset="0%" stop-color="#36cdff"/><stop id="ei7c3BszmJU93-fill-1" offset="100%" stop-color="#40f9f6"/></linearGradient><linearGradient id="ei7c3BszmJU98-fill" x1="2455.83" y1="785.27" x2="2079.57" y2="568.04" spreadMethod="pad" gradientUnits="userSpaceOnUse" gradientTransform="translate(0 0)"><stop id="ei7c3BszmJU98-fill-0" offset="0%" stop-color="#36cdff"/><stop id="ei7c3BszmJU98-fill-1" offset="100%" stop-color="#40e6f9"/></linearGradient></defs><g transform="matrix(.385842 0 0 0.385842 2.211687-4.372199)"><rect width="2183.444442" height="1085.471309" rx="0" ry="0" transform="matrix(.83612 0 0 1.020362-11.987277-14.061266)" fill="url(#ei7c3BszmJU28-fill)"/><path d="M1280.66056,1085.73206l612.85-353.83-232.74-135.25-730,421.46l116.38,67.62c64.16,37.29,168.9,37.29,233.49,0h.02Zm614.26003-354.65579l188.76997-108.99421c64.59-37.25,64.94-97.96.77-135.25s-168.92-37.29-233.5,0l-188.78,109l232.74003,135.24421ZM737.95056,1127.76206l190-109.67-715.55-415.83-189.95,109.68c-64.58,37.25-64.93,97.96-.76,135.25l482.82,280.58c64.16,37.29,168.91,37.29,233.49,0l-.05-.01Zm921.42-531.93l-178.71-103.85-237.47,137.1c-65.32,37.74-171.38,37.74-236.32,0l-419.06-243.53-374,215.9l715.59,415.81l729.97-421.43Zm-417.62,32.43l237.47-137.1-419.06-243.54c-64.17-37.29-168.91-37.29-233.5,0l-237.47,137.11l419.09,243.53c64.17,37.29,168.92,37.29,233.5,0h-.03Zm-655.35-243.54l-312.36-181.46-256.83,148.25c-64.59,37.25-64.92,97.96-.76,135.25l195.95,113.87l374-215.91Zm238.85-137.92c65.33-37.74,171.39-37.74,236.33,0l419.07,243.54l260.99-150.66c64.59-37.26,64.93-97.97.76-135.26l-616.5-358.23c-64.17-37.28-168.92-37.28-233.5,0l-616.94,356.22l312.32,181.5l237.47-137.11Zm-915.4-256.87l364.22,211.66l617-356.21c65.33-37.75,171.33-37.75,236.33,0l616.43,358.22c64.95,37.75,64.6,99.15-.77,136.89l-261,150.67l178.71,103.85l188.78-109c65.37-37.74,171.38-37.74,236.32,0s64.6,99.15-.77,136.89l-188.78,109l226.94,131.88-1.42.83-226.94-131.89-612.85,353.83c-65.32,37.74-171.38,37.74-236.32,0l-116.37-67.63-190,109.67c-65.32,37.74-171.38,37.74-236.32,0l-482.82-280.59c-64.94-37.74-64.6-99.14.76-136.88l190-109.67-195.94-113.87c-64.95-37.75-64.61-99.15.76-136.89l256.83-148.3-364.2-211.66l1.42-.82v.02Z" fill="#0b0d29"/><path d="M571.82,14.23h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m392.71,10.14h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24.08.33c-3.355398.277839-6.693511.73516-10,1.37l.38,2c3.236865-.62462,6.504887-1.075267,9.79-1.35l-.17-2m566.13.11l-.14,2c3.32.23,6.63.54,9.9,1l.25-2c-3.32-.41-6.64-.72-10-1m23.89,3.2l-.39,2c3.26.66,6.5,1.39,9.69,2.21l.5-1.93q-4.86-1.25-9.8-2.24m-613.65,1.78c-3.17938,1.119746-6.294169,2.415071-9.33,3.88l.87,1.81c2.96818-1.435509,6.012738-2.707412,9.12-3.81l-.66-1.88m636.93,4.48l-.64,1.89q4.71,1.61,9.31,3.46l.75-1.86q-4.65-1.86-9.42-3.49m-453.93,4h-2v10h2v-10m-204.57,2.51c-2.776002,1.892964-5.446639,3.936002-8,6.12l1.29,1.53c2.508155-2.142418,5.132109-4.145436,7.86-6l-1.12-1.65M1048,835.5l-.88,1.79c3,1.46,5.91,3,8.79,4.62l1-1.74c-2.92-1.63-5.88-3.2-8.89-4.67m20.88,12l-1.11,1.67q4.14,2.75,8.13,5.72l1.19-1.6q-4-3-8.21-5.79m-719.74,1.3c-2.213525,2.554649-4.289784,5.225078-6.22,8l1.63,1.15c1.891664-2.70455,3.92796-5.305001,6.1-7.79l-1.51-1.31m222.66,5.43h-2v10h2v-10m516.23,7.89l-1.32,1.51q3.75,3.27,7.33,6.72l1.38-1.44q-3.6-3.49-7.39-6.79M335.72,868.9c-1.498189,3.016226-2.833442,6.110675-4,9.27l1.87.69c1.148449-3.089285,2.456885-6.116712,3.92-9.07l-1.79-.89m236.1,9.33h-2v10h2v-10m533.36.84l-1.49,1.33q3.3,3.72,6.41,7.61l1.56-1.25c-2.1-2.62-4.25-5.18-6.48-7.69M327.84,891.76c-.679956,3.303846-1.180687,6.642057-1.5,10l2,.18c.310401-3.281168.801143-6.542766,1.47-9.77l-2-.4v0M1120,898.08l-1.64,1.13q2.79,4.11,5.37,8.37l1.71-1q-2.61-4.31-5.44-8.46m-548.19,4.14h-2v10h2v-10M328,915.77l-2,.11c.170918,3.350153.524779,6.688463,1.06,10l2-.31c-.506373-3.256749-.840172-6.537997-1-9.83m804.26,3.08l-1.78.91c1.49,3,2.92,6,4.26,9l1.82-.81q-2-4.61-4.3-9.1M571.86,926.2h-2v10h2v-10m-239.6,12.86l-1.91.6c1.033865,3.209464,2.232114,6.36363,3.59,9.45l1.83-.81c-1.335534-3.014547-2.507241-6.099041-3.51-9.24m809.51,2l-1.89.66q1.65,4.68,3,9.46l1.91-.55q-1.41-4.85-3.07-9.57m-569.95,9.18h-2v10h2v-10M342.3,960.5l-1.69,1.08c1.810621,2.838197,3.770022,5.578688,5.87,8.21l1.57-1.24c-2.058528-2.561786-3.97796-5.2323-5.75-8m806,3.76l-2,.41c.68,3.23,1.29,6.49,1.8,9.78l2-.31c-.51-3.32-1.12-6.61-1.81-9.88m-576.46,10h-2v10h2v-10M357.45,978.7l-1.36,1.46c2.465774,2.293705,5.052825,4.453476,7.75,6.47L365,985c-2.64135-1.972786-5.174989-4.085821-7.59-6.33m794.28,9.41l-2,.16q.39,4.93.52,9.93l2-.06c-.09-3.36-.26-6.71-.53-10m-775,4.36l-.95,1.76c2.966621,1.59468,6.017796,3.026795,9.14,4.29l.75-1.85c-3.053736-1.237353-6.038119-2.639412-8.94-4.2m195.12,5.76h-2v5.21h-3.46v2h3.46v2.79h2v-2.79h4.55v-2h-4.55v-5.21m-173,2.67l-.46,1.94c3.27457.78618,6.589462,1.393743,9.93,1.82l.26-2c-3.272388-.421755-6.520238-1.015915-9.73-1.78m825.56,2.54h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-48,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m806,0v2v0c3.297604.068735,6.589077.315762,9.86.74l.25-2c-3.3-.42-6.67-.67-10.07-.76m23.91,3.61l-.55,1.92c3.174618.911356,6.298958,1.98952,9.36,3.23l.74-1.85c-3.121541-1.271289-6.309526-2.372896-9.55-3.3m-110,5.12h-2v10h2v-10m132.2,4.47l-1,1.72c2.832276,1.69152,5.575883,3.527267,8.22,5.5l1.19-1.61c-2.697649-2.014003-5.498088-3.886526-8.39-5.61m-712.7,5.58h-2v10h2v-10m731.74,9.33l-1.42,1.41c2.314868,2.342982,4.504575,4.806402,6.56,7.38l1.56-1.24c-2.096306-2.635011-4.332872-5.155321-6.7-7.55m-151.24,4.61h-2v10h2v-10m-580.5,10h-2v10h2v-10m746.4,4.57l-1.74,1c1.655699,2.854668,3.151342,5.799216,4.48,8.82l1.83-.81c-1.356611-3.081784-2.882265-6.086353-4.57-9m-165.9,9.38h-2v10h2v-10m-580.5,10.06h-2v10h2v-10m755.69,2.88l-1.93.53c.867641,3.179985,1.561997,6.404731,2.08,9.66l2-.31c-.525509-3.329614-1.233239-6.627901-2.12-9.88m-175.19,11.07h-2v10h2v-10m-580.5,10h-2v10h2v-10m759,2.83h-2v10h2v-10m-178.49,11.11h-2v10h2v-10m-580.5,10h-2v10h2v-10m759,2.86h-2v10h2v-10m-178.49,11.09h-2v10h2v-10m-580.5,10.06h-2v5.12h-2.58v2h2.53v2.88h2v-2.88h5.48v-2h-5.48v-5.12m759,2.85h-2v10h2v-10m-570.95,2.27h-.57v2h.57c3.15,0,6.26.16,9.32.46l.19-2c-3.12-.31-6.3-.46-9.51-.46m-14.56,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-48,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-2.79q-3.69,0-7.3.27l.15,2q3.54-.27,7.15-.27h2.77v-2m-24,2.39c-3.281989.764338-6.522864,1.695548-9.71,2.79l.66,1.89c3.116255-1.077061,6.287362-1.988337,9.5-2.73l-.45-2m710,.53l-.5,1.94c3.194346.831939,6.342135,1.833356,9.43,3l.71-1.87c-3.15862-1.168009-6.376381-2.169387-9.64-3m369,5.91h-2v10h2v-10m-1101.74,2c-2.984651,1.565181-5.882238,3.291048-8.68,5.17L43,1165c2.740311-1.841289,5.577749-3.533737,8.5-5.07l-.93-1.77m755.17,1l-1,1.74c2.879617,1.610136,5.673402,3.369187,8.37,5.27l1.15-1.64c-2.755325-1.936492-5.609151-3.728895-8.55-5.37m-233.93,7h-2v10h2v-10m759,2.84h-2v10h2v-10m-1300,3c-2.490048,2.268322-4.856774,4.668429-7.09,7.19l1.5,1.33c2.186075-2.452844,4.49925-4.789384,6.93-7l-1.34-1.48m794.42,1.49l-1.39,1.45c2.38725,2.280417,4.650499,4.687206,6.78,7.21l1.52-1.29c-2.170131-2.578246-4.476767-5.038435-6.91-7.37m327.11,6.61h-2v10h2v-10m-580.5,10h-2v10h2v-10m-556.66.29c-1.81902,2.830366-3.48799,5.7544-5,8.76l1.79.9c1.484979-2.94291,3.127357-5.803718,4.92-8.57l-1.67-1.09m825.25,1.87l-1.7,1c1.731079,2.806478,3.310025,5.703992,4.73,8.68l1.8-.86c-1.445469-3.043336-3.057925-6.004512-4.83-8.87m490.4.7h-2v10h2v-10m-178.49,11.09h-2v10h2v-10M4.71,1212.33c-1.056653,3.196187-1.937965,6.447695-2.64,9.74l2,.42c.677821-3.206127,1.525686-6.373935,2.54-9.49l-1.9-.62m567.11,1.9h-2v10h2v-10m278.53.21l-1.91.58c.949916,3.156909,1.734318,6.361273,2.35,9.6l2-.37c-.622855-3.310812-1.424021-6.585579-2.4-9.81m480.46,2.64h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M0.17,1236.08c-.12,1.91-.17,3.85-.17,5.79v4.26h2v-4.26c0-1.9,0-3.79.17-5.68l-2-.11m571.65,2.15h-2v10h2v-10m282.5.06l-2,.07q.06,1.76.06,3.51v6.46h2v-6.46c0-1.19,0-2.39-.07-3.58m476.49,2.78h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M2,1260.13h-2v10h2v-10m569.82,2.09h-2v10h2v-10m282.57.11h-2v10h2v-10m476.42,2.75h-2v10h2v-10m-178.49,11.09h-2v10h2v-10M2,1284.14h-2v10h2v-10m569.82,2.09h-2v10h2v-10m282.57.09h-2v10h2v-10m476.42,2.76h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M2,1308.13h-2v10h2v-10m569.82,2.1h-2v10h2v-10m282.57.1h-2v10h2v-10m476.42,2.74h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M2,1332.13h-2v10h2v-10m569.82,2.09h-2v10h2v-10m282.57.11h-2v10h2v-10m476.42,2.75h-2v10h2v-10m-178.49,11.09h-2v10h2v-10M2,1356.14h-2v10h2v-10m569.82,2.09h-2v10h2v-10m282.57.09h-2v10h2v-10m476.42,2.76h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M2,1380.13h-2v10h2v-10m569.82,2.1h-2v10h2v-10m282.57.1h-2v10h2v-10m476.42,2.74h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M2,1404.13h-2v10h2v-10m569.82,2.09h-2v10h2v-10m282.57.11h-2v10h2v-10m476.42,2.75h-2v10h2v-10m-178.49,11.09h-2v10h2v-10M2,1428.14h-2v10h2v-10m569.82,2.09h-2v10h2v-10m282.57.09h-2v10h2v-10m476.42,2.76h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M2,1452.13h-2v10h2v-10m569.82,2.1h-2v10h2v-10m282.57.1h-2v10h2v-10m476.42,2.74h-2v10h2v-10m-178.49,11.1h-2v10h2v-10M2,1476.13h-2v10h2v-10m569.82,2.09h-2v5.49c0,1.53,0,3,.1,4.57l2-.1c-.07-1.48-.11-3-.11-4.47v-5.49m282.57.11h-2v10h2v-10m476.42,2.75h-2v2.63c0,2.45-.09,4.88-.28,7.27l2,.17q.29-3.69.29-7.44v-2.63m-178.49,11.09h-2v10h2v-10M2,1500.14h-2v10h2v-10m571.61,1.77l-2,.39c.659696,3.302876,1.497587,6.567647,2.51,9.78l1.9-.59c-.984179-3.148137-1.801976-6.345894-2.45-9.58m280.78.41h-2v10h2v-10m472.05,2.34c-.754362,3.211412-1.672224,6.382208-2.75,9.5l1.88.66c1.117434-3.181596,2.055574-6.423352,2.81-9.71l-1.94-.45m-174.12,11.52h-2v10h2v-10M2,1524.13h-2v10h2v-10m579.19.2l-1.8.88c1.48357,3.026495,3.129294,5.970771,4.93,8.82L586,1533v0c-1.764033-2.785907-3.373141-5.666945-4.82-8.63m273.2,2h-2v10h2v-10m463.78.52c-1.543541,2.916978-3.23921,5.750881-5.08,8.49l1.66,1.11c1.881408-2.791246,3.610596-5.682128,5.18-8.66l-1.76-.94m-165.85,13.32h-2v10h2v-10m-558.09,3.91l-1.52,1.31c2.198827,2.55567,4.535643,4.989297,7,7.29l1.36-1.46c-2.400264-2.258617-4.68008-4.641908-6.83-7.14m710.29,2.13c-2.208288,2.429819-4.544959,4.739786-7,6.92l1.32,1.5c2.527827-2.22626,4.934607-4.586307,7.21-7.07l-1.48-1.35M2,1548.13h-2v10h2v-10m852.39,2.2h-2v10h2v-10m-242.55,9.58l-1.14,1.64c2.775835,1.915262,5.649744,3.684335,8.61,5.3l1-1.77c-2.898827-1.568531-5.709692-3.294442-8.42-5.17m674.61,1.57c-2.770707,1.791027-5.634756,3.433349-8.58,4.92l.9,1.79c3.006829-1.509718,5.930983-3.178756,8.76-5l-1.08-1.68m-134.13,2.69h-2v10h2v-10m-519.43,6.59l-.68,1.88c3.167604,1.149154,6.395772,2.123947,9.67,2.92l.47-2c-3.203672-.774105-6.36187-1.72557-9.46-2.85m632.19.92c-3.132055,1.022906-6.316609,1.877462-9.54,2.56l.41,2c3.297075-.701376,6.554921-1.575921,9.76-2.62l-.63-1.9M2,1572.13h-2v10h2v-10m852.39,2.19h-2v1.93h-4.5v2h4.5v6.07h2v-6.07h3.51v-2h-3.51v-1.93M656,1575.87l-.18,2c2.81.24,5.65.38,8.53.38h1.54v-2h-1.54c-2.81,0-5.6-.13-8.35-.38m585.83.21c-1.84.11-3.68.16-5.55.17h-4.39v2h4.39c1.9,0,3.79-.06,5.67-.17l-.12-2m-23.93.17h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-48,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m462.42,11.93h-2v10h2v-10M2,1596.13h-2v10h2v-10m852.39,2.2h-2v10h2v-10m297.93,13.84h-2v10h2v-10M2,1620.13h-2v10h2v-10m852.39,2.2h-2v10h2v-10m297.93,13.84h-2v10h2v-10M2,1644.13h-2v10h2v-10m852.39,2.19h-2v10h2v-10m297.93,13.86h-2v10h2v-10M2,1668.13h-2v8.41c0,.54,0,1.08,0,1.61h2c0-.52,0-1,0-1.57v-8.41m852.39,2.2h-2v10h2v-10M1150,1684.08c-.265445,3.287813-.706071,6.559126-1.32,9.8l2,.37c.62849-3.306795,1.079138-6.644925,1.35-10l-2-.16M3.27,1691.89l-2,.33c.545607,3.324098,1.273369,6.615722,2.18,9.86l1.93-.54c-.88389-3.176458-1.598232-6.397673-2.14-9.65m851.12,2.44h-2v10h2v-10m290.72,12.91c-1.086511,3.110843-2.345119,6.158879-3.77,9.13l1.8.87c1.454904-3.044525,2.743467-6.165784,3.86-9.35l-1.89-.65m-1135,7.31l-1.81.82c1.381884,3.08213,2.930851,6.086593,4.64,9l1.72-1c-1.670612-2.844285-3.189406-5.775057-4.55-8.78m844.26,3.77h-2v10h2v-10m280.08,10c-1.859852,2.72728-3.862649,5.354282-6,7.87l1.53,1.3c2.176223-2.575475,4.212491-5.266019,6.1-8.06l-1.65-1.11M22.56,1734.7L21,1736c2.117471,2.62237,4.374044,5.129302,6.76,7.51l1.41-1.42c-2.338953-2.327537-4.548917-4.781198-6.62-7.35m831.83,7.63h-2v10h2v-10m264.41,3.79c-2.482973,2.172333-5.076423,4.215051-7.77,6.12l1.15,1.63c2.758638-1.937011,5.409264-4.023461,7.94-6.25l-1.32-1.5m-1079.13,5l-1.19,1.61c2.712266,1.999303,5.529632,3.851954,8.44,5.55l1-1.73c-2.849544-1.659229-5.606933-3.471895-8.26-5.43m1059.49,8.27c-2.951883,1.472049-5.97943,2.787213-9.07,3.94l.7,1.88c3.154208-1.171192,6.245085-2.506344,9.26-4l-.89-1.79m-1038.79,3.1l-.73,1.85c3.126773,1.255634,6.321842,2.334011,9.57,3.23l.53-1.93c-3.177528-.88132-6.305375-1.932838-9.37-3.15m794,3.77h-2v2.75h-1.25v2h1.25v5.26h2v-5.26h6.75v-2h-6.75v-2.75m222.4.79c-3.227568.673976-6.488901,1.174693-9.77,1.5l.2,2c3.357814-.334625,6.695743-.845328,10-1.53l-.41-2M83.3,1768.4l-.25,2c3.341883.408777,6.703499.635778,10.07.68v-2c-3.292578-.05599-6.580168-.279613-9.85-.67m969.84.68h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-48,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m737.25,21.24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v10h2v-10m0,24h-2v2.95q0,3.6.26,7.12l2-.15q-.25-3.45-.26-7v-2.95m2.31,23.6l-1.94.45c.740286,3.285074,1.661694,6.526691,2.76,9.71l1.89-.65c-1.069139-3.12039-1.973718-6.294758-2.71-9.51m8.19,22.21l-1.77.93c1.55909,2.983972,3.278262,5.881528,5.15,8.68l1.66-1.11v0c-1.840496-2.736962-3.526463-5.574727-5.05-8.5m13.56,19.4l-1.47,1.34c2.264813,2.493199,4.661582,4.863263,7.18,7.1l1.33-1.5c-2.453103-2.189316-4.789648-4.505834-7-6.94m18,15.34l-1.1,1.68c2.827114,1.818715,5.747804,3.48768,8.75,5l.91-1.78c-2.940306-1.513098-5.797708-3.182142-8.56-5m21.33,10.27l-.62,1.9c3.199773,1.058715,6.45454,1.943344,9.75,2.65l.41-2v0c-3.228821-.689989-6.41702-1.55798-9.55-2.6m23.25,4.49l-.13,2q3,.2,6,.19h4.11v-2h-4.08c-2,0-3.92-.06-5.85-.18m849.93.18h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2m-24,0h-10v2h10v-2M571.82,0h-2v.23h2v-.23" transform="matrix(.710141-.41 0.71 0.409919-555.096993 292.263367)" fill="#fff"/><g transform="translate(-476.655461-179.115638)"><path d="M691.89,698.09v0C638,667,550.67,667,497.17,698.08L268.55,830.94L39.93,963.8c-53.49,31.1-53.2,81.69.65,112.78v0c53.85,31.09,141.21,31.09,194.71,0L463.91,943.73L692.54,810.87c53.46-31.1,53.2-81.69-.65-112.78Zm-37.78,90.6L196.88,1054.4c-32.46,18.87-85.45,18.87-118.13,0s-32.85-49.56-.39-68.4L535.59,720.26c32.46-18.86,85.45-18.86,118.13,0s32.85,49.57.39,68.43Z" opacity="0.5" fill="#0b0d29"/><g id="ei7c3BszmJU33_to" transform="translate(595.29538,697.381287)"><g transform="translate(-595.29538,-697.381287)"><path d="M653.23,721.32c31.78,18.47,31.62,48.41-.38,66.89s-83.69,18.46-115.47,0-31.62-48.41.37-66.89s83.69-18.48,115.48,0Z" opacity="0.5" fill="#0b0d29"/></g></g><g id="ei7c3BszmJU35_to" transform="translate(366.234986,795.616272)"><g transform="translate(-366.234985,-795.616272)"><path d="M78.36,916.32L535.59,650.61c32.46-18.87,85.45-18.87,118.13,0c10,5.79,17,12.69,20.87,20l33.26-62L561.8,571.06L23.14,883.15l34.67,53c3.84-7.25,10.68-14.09,20.55-19.83Z" fill="url(#ei7c3BszmJU36-fill)"/><path d="M732.47,636.46l-587.75,345L0,909.58L0.26,955c1.93,18.89,15.37,37.48,40.32,51.89v0c53.85,31.09,141.21,31.09,194.71,0L692.54,741.21C717,727,730.19,708.69,732.17,690Z" fill="url(#ei7c3BszmJU37-fill)"/><path d="M691.89,584.35v0c-53.86-31.1-141.22-31.1-194.72,0L268.55,717.2L39.93,850.07c-53.49,31.09-53.2,81.68.65,112.78v0c53.85,31.09,141.21,31.09,194.71,0L463.91,830L692.54,697.13c53.46-31.13,53.2-81.69-.65-112.78ZM654.11,675L196.88,940.67c-32.46,18.86-85.45,18.86-118.13,0s-32.85-49.57-.39-68.43L535.59,606.53c32.46-18.87,85.45-18.87,118.13,0s32.85,49.56.39,68.47Z" fill="url(#ei7c3BszmJU38-fill)"/></g></g><g id="ei7c3BszmJU39_to" transform="translate(595.29538,697.381287)"><g transform="translate(-595.29538,-697.381287)"><g id="ei7c3BszmJU40_to" transform="translate(595.304993,678.671875)"><path d="M512.3,641l.06,28c0,12.22,8.06,24.42,24.11,33.75c32.3,18.76,84.83,18.77,117.34,0c16.36-9.45,24.53-21.85,24.5-34.23l-.06-28Z" transform="translate(-595.304993,-678.671875)" fill="url(#ei7c3BszmJU40-fill)"/></g><g id="ei7c3BszmJU41_to" transform="translate(595.263123,640.794373)"><path d="M654.14,606.8c32.29,18.77,32.12,49.2-.39,68s-85,18.77-117.34,0-32.13-49.2.38-68s85.05-18.8,117.35,0Z" transform="translate(-595.263123,-640.794373)" fill="url(#ei7c3BszmJU41-fill)"/></g></g></g><g id="ei7c3BszmJU42_to" transform="translate(366.234986,795.616272)"><g transform="translate(-366.234985,-795.616272)"><path d="M732.47,636.46l-587.75,345L0,909.58L0.26,955c1.93,18.89,15.37,37.48,40.32,51.89v0c53.85,31.09,141.21,31.09,194.71,0L692.54,741.21C717,727,730.19,708.69,732.17,690Z" fill="url(#ei7c3BszmJU43-fill)"/><path d="M678.454273,638.948809c0,18.79-10.148253,27.150002-36.958253,43.36C641.49602,681.77,196.879999,940.67,196.879999,940.67L196.88,985.366962L692.54,697.13c53.46-31.13,53.2-81.69-.65-112.78.33602-1.671191-13.435727,23.938809-13.435727,54.598809" fill="url(#ei7c3BszmJU44-fill)"/></g></g></g><g id="ei7c3BszmJU45_to" style="offset-path:path('M-40.722868,122.548367L887.980559,660.013171C934.730559,688.403171,989.980559,696.523171,1050.490559,659.193171C1111.000559,621.863171,1327.800559,498.863171,1409.600559,450.803171C1491.400559,402.743171,1479.220559,379.333171,1423.300559,346.763171C1367.380559,314.193171,1216.556802,225.221313,1169.710559,198.553171C1122.864317,171.885028,1062.540559,183.543171,1033.910559,200.453171C1005.280559,217.363171,542.360559,484.893171,460.070559,532.143171C377.780559,579.393171,221.162099,514.923171,344.140559,445.403171C467.119019,375.883171,607.241934,294.007292,700.550559,240.203171C793.859184,186.39905,902.500559,192.093171,975.510559,233.753171C1048.520559,275.413171,1350.380559,451.543171,1425.100559,494.753171C1499.820559,537.963171,1487.325176,563.343171,1416.34,604.540447C1399.782344,614.149923,826.443271,945.763236,776.980559,974.173171C712.470559,1011.225828,660.810559,995.913171,615.380559,969.323171C569.950559,942.733171,412.120559,851.183171,355.020559,819.473171C297.920559,787.763171,266.360559,761.313171,358.38,706.880447C450.399441,652.447723,733.950559,490.873171,785.490559,461.163171C837.030559,431.453171,886.700559,426.753171,940.390559,457.983171C994.080559,489.213171,1574.47642,826.633171,1609.220559,846.783171C1643.964698,866.933171,1704.450559,867.203171,1741.420559,845.613171C1778.390559,824.023171,1841.346048,788.866678,1841.346048,788.866678');offset-rotate:0deg"><g transform="translate(-1337.22,-616.59)"><ellipse rx="25.12" ry="10.48" transform="translate(1337.22 616.59)" opacity="0.5" fill="#0b0d29"/><circle r="25.12" transform="translate(1337.22 572.24)" fill="url(#ei7c3BszmJU47-fill)"/></g></g><g mask="url(#ei7c3BszmJU55)"><g transform="translate(-476.482376-178.276995)"><g id="ei7c3BszmJU50_ts" transform="translate(1027.349976,934.350006) scale(1,1)"><polygon id="ei7c3BszmJU50" points="1231.98,934.34 1028.02,1052.88 822.72,934.35 1026.68,815.82 1231.98,934.34" transform="translate(-1027.349976,-934.350006)" opacity="0" fill="#0b0d29"/></g><g id="ei7c3BszmJU51_to" transform="translate(1027.350006,970.541345)"><g style="isolation:isolate" transform="translate(-1027.350006,-824.565002)"><polygon points="1232.04,724.64 1231.92,924.49 1027.96,1043.02 1003.76,829.13 1232.04,724.64" fill="#0ef269"/><polygon points="1028.07,806.97 1027.96,1043.02 822.66,924.49 822.77,724.64 1028.07,806.97" fill="#00c997"/><polygon points="1232.04,724.64 1028.07,843.17 822.77,724.64 1026.74,606.11 1232.04,724.64" fill="#8ffe32"/></g></g></g><mask id="ei7c3BszmJU55" mask-type="luminance" x="-150%" y="-150%" height="400%" width="400%"><g style="isolation:isolate" transform="translate(-476.762382-235.958396)"><polygon points="1232.04,724.64 1231.92,992.39509 1027.96,1110.92509 1003.76,829.13 1232.04,724.64" transform="translate(0-.603497)" fill="#fff"/><polygon points="1028.07,806.97 1027.96,1110.561427 822.66,992.031427 822.77,724.64 1028.07,806.97" fill="#fff"/><polygon points="1232.04,724.64 1028.07,843.17 822.77,724.64 1026.74,606.11 1232.04,724.64" fill="#fff"/></g></mask></g><g transform="translate(0 0.000001)"><g id="ei7c3BszmJU61_to" transform="translate(1166.002489,-67.990439)"><polygon id="ei7c3BszmJU61" points="1232.04,724.64 1028.07,843.17 822.77,724.64 1026.74,606.11 1232.04,724.64" transform="scale(0.562697,0.565177) translate(-1027.405029,-724.639984)" fill="#338fe2"/></g><g mask="url(#ei7c3BszmJU86)"><g id="ei7c3BszmJU63_to" transform="translate(1166.367065,287.327729)"><g transform="translate(-1166.367065,-287.327728)"><g transform="matrix(.562697 0 0 0.562697 856.198424-38.00962)" mask="url(#ei7c3BszmJU71)"><g transform="translate(-476.482376-178.276995)"><g id="ei7c3BszmJU66_ts" transform="translate(1028.078631,1115.461471) scale(1,1)"><polygon id="ei7c3BszmJU66" points="1231.98,934.34 1028.02,1052.88 822.72,934.35 1026.68,815.82 1231.98,934.34" transform="translate(-1027.349976,-934.350006)" opacity="0" fill="#0b0d29"/></g><g id="ei7c3BszmJU67_to" style="offset-path:path('M1027.343889,1216.017739L1027.350006,772.757609L1026.997313,772.976757C1027.121788,865.229085,1027.213315,933.06264,1027.27191,976.489003');offset-rotate:0deg"><g style="isolation:isolate" transform="translate(-1027.350006,-824.565002)"><polygon id="ei7c3BszmJU68" points="1232.04,724.64 1231.915639,967.01648 1028.34249,1084.573527 1003.76,829.13 1232.04,724.64" opacity="0" fill="#00c997"/><polygon id="ei7c3BszmJU69" points="1028.07,806.97 1028.306947,1084.573527 822.77,967.01648 822.77,724.64 1028.07,806.97" opacity="0" fill="#00abb7"/><polygon id="ei7c3BszmJU70" points="1232.04,724.64 1028.07,843.17 822.77,724.64 1026.74,606.11 1232.04,724.64" opacity="0" fill="#338fe2"/></g></g></g><mask id="ei7c3BszmJU71" mask-type="luminance" x="-150%" y="-150%" height="400%" width="400%"><g style="isolation:isolate" transform="translate(-476.762382-235.958396)"><polygon points="1232.04,724.64 1231.92,1175.92413 1027.96,1294.45413 1003.76,829.13 1232.04,724.64" transform="translate(0-.603497)" fill="#fff"/><polygon points="1028.07,806.97 1027.997313,1293.850638 822.66,1175.320643 822.77,724.64 1028.07,806.97" fill="#fff"/><polygon points="1232.04,724.64 1028.07,843.17 822.77,724.64 1026.74,606.11 1232.04,724.64" fill="#fff"/></g></mask></g><g transform="translate(-476.850005-178.167831)"><g id="ei7c3BszmJU77_to" transform="translate(1642.87498,41.782837)"><g style="isolation:isolate" transform="translate(-1643.025024,-310.555008)"><polygon points="1758,242.51 1757.93,378.59 1643.36,445.17 1627.98,300.17 1758,242.51" fill="#0ef269"/><polygon points="1643.43,287.66 1643.36,445.17 1528.05,378.59 1528.11,242.51 1643.43,287.66" fill="#00c997"/><polygon points="1758,242.51 1643.43,309.09 1528.11,242.51 1642.68,175.94 1758,242.51" fill="#00abb7"/></g></g></g><g transform="translate(-476.850005-178.167831)"><g id="ei7c3BszmJU82_to" transform="translate(1642.87498,41.557345)"><g style="isolation:isolate" transform="translate(-1643.054993,-134.615005)"><polygon id="ei7c3BszmJU83" points="1758.03,66.58 1757.96,202.65 1643.4,269.23 1627.98,124.22 1758.03,66.58" fill="#8ffe0c"/><polygon id="ei7c3BszmJU84" points="1643.46,114.47 1643.4,269.23 1528.08,202.66 1528.14,66.58 1643.46,114.47" fill="#0ef269"/><polygon id="ei7c3BszmJU85" points="1758.03,66.58 1643.46,133.16 1528.14,66.58 1642.71,0 1758.03,66.58" fill="#dffe0a"/></g></g></g></g></g><mask id="ei7c3BszmJU86" mask-type="luminance" x="-150%" y="-150%" height="400%" width="400%"><path d="M1051.134171,-17.378609l-.000001,507.923102l115.295812,66.658879l114.804528-66.466978.000001-508.115004-115.554529-66.593588-114.545811,66.593589Z" transform="translate(0 0.000002)" fill="#fff" stroke-width="3.6"/></mask></g></g><g transform="translate(-477.429474-178.928993)"><path d="M1658.1,939.11c57.74,33.55,57.43,88-.69,121.52s-152,33.55-209.78,0-57.45-88,.67-121.51s152.05-33.57,209.8-.01Zm-56.32,85.42c27.2-15.71,27.34-41.17.32-56.87s-71-15.7-98.16,0-27.34,41.15-.32,56.85s71,15.71,98.16,0" opacity="0.5" fill="#0b0d29"/><g id="ei7c3BszmJU90_to" transform="translate(1552.91095,929.650025)"><g transform="translate(-1552.910949,-964.650024)"><path d="M1459.22,892l23.22,98.32c0-10.52,6.91-21.06,20.82-29.09c27.64-16,72.3-16,99.75,0c13.64,7.93,20.47,18.3,20.5,28.69L1646,892Z" fill="url(#ei7c3BszmJU91-fill)"/><path d="M1402.12,939.64l.11,50.88c.06,22.2,14.65,44.37,43.81,61.31c58.67,34.1,154.11,34.1,213.17,0c29.72-17.15,44.57-39.68,44.5-62.17l-.11-50.88c-80.2,77.49-221.27,77.76-301.48.86Z" fill="url(#ei7c3BszmJU92-fill)"/><path d="M1659.8,877.47c58.68,34.1,58.36,89.39-.7,123.48s-154.5,34.1-213.18,0-58.37-89.38.69-123.48s154.51-34.1,213.19,0Zm-57.23,90.63c27.64-16,27.78-41.82.33-57.78s-72.11-16-99.75,0-27.78,41.82-.33,57.78s72.12,16,99.75,0" fill="url(#ei7c3BszmJU93-fill)"/></g></g></g><g id="ei7c3BszmJU94_to" transform="translate(2123.659254,358.108233)"><g transform="translate(-2267.695007,-729.654999)"><polygon points="2443.56,602.8 1957.67,885.17 2091.83,962.51 2577.72,680.14 2443.56,602.8" opacity="0.5" fill="#0b0d29"/><polygon points="1957.67,779.17 1957.67,807.34 2091.83,884.68 2123.23,838.25 1957.67,779.17" fill="#338fe2"/><polygon points="2091.83,823.95 2091.83,884.68 2577.72,602.31 2577.72,574.13 2091.83,823.95" fill="#36b1ff"/><polygon points="2443.56,496.8 1957.67,779.17 2091.83,856.5 2577.72,574.13 2443.56,496.8" fill="url(#ei7c3BszmJU98-fill)"/></g></g></g></svg>
diff --git a/site/static/assets/lazy-templates/esl-animated-stroke.svg b/site/static/assets/lazy-templates/esl-animated-stroke.svg
new file mode 100644
index 000000000..132ebd139
--- /dev/null
+++ b/site/static/assets/lazy-templates/esl-animated-stroke.svg
@@ -0,0 +1,59 @@
+<svg viewBox="0 0 640 480" class="esl-animated-stroke">
+  <style><![CDATA[
+  @import url('https://fonts.googleapis.com/css2?family=Orbitron:wght@900');
+  svg.esl-animated-stroke {
+    background: #333;
+    background-size: 0.2em 100%;
+    font: 7em/1 Orbitron;
+    text-transform: uppercase;
+    margin: 0;
+  }
+  .esl-animated-stroke .text {
+    fill: none;
+    stroke-width: 3;
+    stroke-linejoin: round;
+    stroke-dasharray: 70 330;
+    stroke-dashoffset: 0;
+    animation: esl-animated-stroke 6s infinite linear;
+  }
+  .esl-animated-stroke .text:nth-child(5n+1) {
+    stroke: #F2385A;
+    animation-delay: -1.2s;
+  }
+  .esl-animated-stroke .text:nth-child(5n+2) {
+    stroke: #F5A503;
+    animation-delay: -2.4s;
+  }
+  .esl-animated-stroke .text:nth-child(5n+3) {
+    stroke: #E9F1DF;
+    animation-delay: -3.6s;
+  }
+  .esl-animated-stroke .text:nth-child(5n+4) {
+    stroke: #56D9CD;
+    animation-delay: -4.8s;
+  }
+  .esl-animated-stroke .text:nth-child(5n+5) {
+    stroke: #3AA1BF;
+    animation-delay: -6s;
+  }
+  @keyframes esl-animated-stroke {
+    100% {
+      stroke-dashoffset: -400;
+    }
+  }
+]]></style>
+  <!-- Symbol-->
+  <symbol id="esl-animated-stroke-text">
+    <text text-anchor="middle">
+      <tspan x="50%" y="50%" dx=".15em" dy="-.85em">Exadel</tspan>
+      <tspan x="50%" y="50%" dx=".15em" dy=".35em">Smart</tspan>
+      <tspan x="50%" y="50%" dy="1.7em">Library</tspan>
+    </text>
+  </symbol>
+  <!-- Duplicate symbols-->
+  <use class="text" href="#esl-animated-stroke-text"></use>
+  <use class="text" href="#esl-animated-stroke-text"></use>
+  <use class="text" href="#esl-animated-stroke-text"></use>
+  <use class="text" href="#esl-animated-stroke-text"></use>
+  <use class="text" href="#esl-animated-stroke-text"></use>
+</svg>
diff --git a/site/static/assets/lazy-templates/esl-noise-distort.svg b/site/static/assets/lazy-templates/esl-noise-distort.svg
new file mode 100644
index 000000000..6e56d8142
--- /dev/null
+++ b/site/static/assets/lazy-templates/esl-noise-distort.svg
@@ -0,0 +1,29 @@
+<svg viewBox="0 0 640 160" class="esl-noise-distort">
+  <style><![CDATA[
+  @import url('https://fonts.googleapis.com/css2?family=Yanone+Kaffeesatz:wght@700');
+  svg.esl-noise-distort {
+    background: #2E8B57;
+    background-size: 0.2em 100%;
+    font: 7em/1 "Yanone Kaffeesatz", serif;
+    margin: 0;
+  }
+  .esl-noise-distort .text {
+    fill: #FF6347;
+  }
+]]></style>
+  <defs>
+    <!-- Filter-->
+    <filter id="esl-noise-distort-filter">
+      <feTurbulence baseFrequency="0.01 0.01" numOctaves="1" result="noise">
+        <animate attributeName="baseFrequency" values="0.01,0.01;0,0;0.01,0.01" keyTimes="0;.5;1" dur="10s" repeatCount="indefinite"></animate>
+      </feTurbulence>
+      <feDisplacementMap in="SourceGraphic" in2="noise" scale="10" xChannelSelector="R" yChannelSelector="R" />
+    </filter>
+    <!-- Symbol-->
+    <symbol id="esl-noise-distort-text">
+      <text text-anchor="middle" x="50%" y="50%" dy=".3em" filter="url(#esl-noise-distort-filter)">ESL is amazing</text>
+    </symbol>
+  </defs>
+  <!-- Text + filter-->
+  <use class="text" href="#esl-noise-distort-text"></use>
+</svg>
diff --git a/site/static/assets/lazy-templates/esl-text-squiggly.svg b/site/static/assets/lazy-templates/esl-text-squiggly.svg
new file mode 100644
index 000000000..bbbd6372a
--- /dev/null
+++ b/site/static/assets/lazy-templates/esl-text-squiggly.svg
@@ -0,0 +1,36 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+  <style><![CDATA[
+    .esl-lazy-template-svg-test :is(p,h1,h2,h3,h4) {
+      animation: esl-text-squiggly-animation 0.34s linear infinite;
+    }
+    @keyframes esl-text-squiggly-animation {
+      0% {filter: url('#esl-text-squiggly-0');}
+      25% {filter: url('#esl-text-squiggly-1');}
+      50% {filter: url('#esl-text-squiggly-2');}
+      75% {filter: url('#esl-text-squiggly-3');}
+      100% {filter: url('#esl-text-squiggly-4');}
+    }
+  ]]></style>
+  <defs>
+    <filter id="esl-text-squiggly-0">
+      <feTurbulence id="esl-text-squiggly-turbulence-0" baseFrequency="0.02" numOctaves="3" result="noise" seed="0"/>
+      <feDisplacementMap in="SourceGraphic" in2="noise" scale="6" />
+    </filter>
+    <filter id="esl-text-squiggly-1">
+      <feTurbulence id="esl-text-squiggly-turbulence-1" baseFrequency="0.02" numOctaves="3" result="noise" seed="1"/>
+      <feDisplacementMap in="SourceGraphic" in2="noise" scale="8" />
+    </filter>
+    <filter id="esl-text-squiggly-2">
+      <feTurbulence id="esl-text-squiggly-turbulence-2" baseFrequency="0.02" numOctaves="3" result="noise" seed="2"/>
+      <feDisplacementMap in="SourceGraphic" in2="noise" scale="6" />
+    </filter>
+    <filter id="esl-text-squiggly-3">
+      <feTurbulence id="esl-text-squiggly-turbulence-3" baseFrequency="0.02" numOctaves="3" result="noise" seed="3"/>
+      <feDisplacementMap in="SourceGraphic" in2="noise" scale="8" />
+    </filter>
+    <filter id="esl-text-squiggly-4">
+      <feTurbulence id="esl-text-squiggly-turbulence-4" baseFrequency="0.02" numOctaves="3" result="noise" seed="4"/>
+      <feDisplacementMap in="SourceGraphic" in2="noise" scale="6" />
+    </filter>
+  </defs>
+</svg>
diff --git a/site/static/assets/lazy-templates/template1.html b/site/static/assets/lazy-templates/template1.html
new file mode 100644
index 000000000..5c76627ca
--- /dev/null
+++ b/site/static/assets/lazy-templates/template1.html
@@ -0,0 +1,9 @@
+<div id="template-from-url-1"
+    class="text-center"
+    distance-to-viewport-alert
+    style="background: lightyellow; border: 3px dashed darkorange;">
+  <p>...</p>
+  <p>I am content No.1 which was added to DOM by the lazy template and loaded from the specified URL</p>
+  <p>I am inside DIV with id="template-from-url-1".</p>
+  <p>...</p>
+</div>
diff --git a/site/static/assets/lazy-templates/template2.html b/site/static/assets/lazy-templates/template2.html
new file mode 100644
index 000000000..9bdaa7e6b
--- /dev/null
+++ b/site/static/assets/lazy-templates/template2.html
@@ -0,0 +1,9 @@
+<div id="template-from-url-2"
+    class="text-center"
+    distance-to-viewport-alert
+    style="background: lightyellow; border: 3px dashed darkorange;">
+  <p>...</p>
+  <p>I am content No.2 which was added to DOM by the lazy template and loaded from the specified URL</p>
+  <p>I am inside DIV with id="template-from-url-2".</p>
+  <p>...</p>
+</div>
diff --git a/site/static/assets/lazy-templates/wind-blowing-in-may-svg-animation.svg b/site/static/assets/lazy-templates/wind-blowing-in-may-svg-animation.svg
new file mode 100644
index 000000000..a95a3f47a
--- /dev/null
+++ b/site/static/assets/lazy-templates/wind-blowing-in-may-svg-animation.svg
@@ -0,0 +1,5 @@
+<svg id="eSfF1urTRx01" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 700 400" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" style="background-color:#fff">
+<style><![CDATA[
+#eSfF1urTRx010_tr {animation: eSfF1urTRx010_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx010_tr__tr { 0% {transform: translate(603.21px,786.54px) rotate(-1.294744deg);animation-timing-function: cubic-bezier(0.276354,0.533525,0.59058,0.93481)} 16.666667% {transform: translate(603.21px,786.54px) rotate(0deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 66.666667% {transform: translate(603.21px,786.54px) rotate(-5.566192deg);animation-timing-function: cubic-bezier(0.465064,0.045396,0.68256,0.628476)} 100% {transform: translate(603.21px,786.54px) rotate(-1.294744deg)}} #eSfF1urTRx011_tr {animation: eSfF1urTRx011_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx011_tr__tr { 0% {transform: translate(611.411825px,786.54px) rotate(4.406352deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 50% {transform: translate(611.411825px,786.54px) rotate(-5.566192deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 100% {transform: translate(611.411825px,786.54px) rotate(4.406352deg)}} #eSfF1urTRx012_tr {animation: eSfF1urTRx012_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx012_tr__tr { 0% {transform: translate(426.765001px,723.07px) rotate(2.909731deg);animation-timing-function: cubic-bezier(0.288922,0.57899,0.606405,1)} 16.666667% {transform: translate(426.765001px,723.07px) rotate(8.19951deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(426.765001px,723.07px) rotate(-14.623516deg);animation-timing-function: cubic-bezier(0.433203,0,0.682004,0.615475)} 100% {transform: translate(426.765001px,723.07px) rotate(2.909731deg)}} #eSfF1urTRx013_tr {animation: eSfF1urTRx013_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx013_tr__tr { 0% {transform: translate(399.860001px,721.48px) rotate(-3.547416deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 50% {transform: translate(399.860001px,721.48px) rotate(-31.210253deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 100% {transform: translate(399.860001px,721.48px) rotate(-3.547416deg)}} #eSfF1urTRx014_tr {animation: eSfF1urTRx014_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx014_tr__tr { 0% {transform: translate(453.670001px,782.2px) rotate(0deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 50% {transform: translate(453.670001px,782.2px) rotate(-8.467818deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 100% {transform: translate(453.670001px,782.2px) rotate(0deg)}} #eSfF1urTRx016_tr {animation: eSfF1urTRx016_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx016_tr__tr { 0% {transform: translate(421.57px,605.5px) rotate(-13.084234deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 50% {transform: translate(421.57px,605.5px) rotate(0deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 100% {transform: translate(421.57px,605.5px) rotate(-13.084234deg)}} #eSfF1urTRx017_tr {animation: eSfF1urTRx017_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx017_tr__tr { 0% {transform: translate(406.45px,563.57px) rotate(-2.839713deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 50% {transform: translate(406.45px,563.57px) rotate(0deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 100% {transform: translate(406.45px,563.57px) rotate(-2.839713deg)}} #eSfF1urTRx018_tr {animation: eSfF1urTRx018_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx018_tr__tr { 0% {transform: translate(698.42px,738.500001px) rotate(15.92348deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 50% {transform: translate(698.42px,738.500001px) rotate(-15.356544deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 100% {transform: translate(698.42px,738.500001px) rotate(15.92348deg)}} #eSfF1urTRx020_tr {animation: eSfF1urTRx020_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx020_tr__tr { 0% {transform: translate(709.030001px,660.81px) rotate(0deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 50% {transform: translate(709.030001px,660.81px) rotate(13.126461deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 100% {transform: translate(709.030001px,660.81px) rotate(0deg)}} #eSfF1urTRx021_tr {animation: eSfF1urTRx021_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx021_tr__tr { 0% {transform: translate(720.933098px,614.84px) rotate(0deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 50% {transform: translate(720.933098px,614.84px) rotate(-3.910539deg);animation-timing-function: cubic-bezier(0.25,1,0.25,1)} 100% {transform: translate(720.933098px,614.84px) rotate(0deg)}} #eSfF1urTRx022_tr {animation: eSfF1urTRx022_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx022_tr__tr { 0% {transform: translate(499.620001px,740px) rotate(-9.698528deg);animation-timing-function: cubic-bezier(0.312841,0.373858,0.532077,0.954577)} 33.333333% {transform: translate(499.620001px,740px) rotate(0deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(499.620001px,740px) rotate(-12.709829deg);animation-timing-function: cubic-bezier(0.409552,0.064742,0.723108,0.467131)} 100% {transform: translate(499.620001px,740px) rotate(-9.698528deg)}} #eSfF1urTRx043_tr {animation: eSfF1urTRx043_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx043_tr__tr { 0% {transform: translate(649.24px,682.19px) rotate(7.617458deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 50% {transform: translate(649.24px,682.19px) rotate(0deg);animation-timing-function: cubic-bezier(0.445,0.05,0.55,0.95)} 100% {transform: translate(649.24px,682.19px) rotate(7.617458deg)}} #eSfF1urTRx044_tr {animation: eSfF1urTRx044_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx044_tr__tr { 0% {transform: translate(459px,637.130001px) rotate(4.741566deg);animation-timing-function: cubic-bezier(0.288922,0.57899,0.606405,1)} 16.666667% {transform: translate(459px,637.130001px) rotate(9.280442deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(459px,637.130001px) rotate(-10.302774deg);animation-timing-function: cubic-bezier(0.433203,0,0.682004,0.615475)} 100% {transform: translate(459px,637.130001px) rotate(4.741566deg)}} #eSfF1urTRx051 {animation: eSfF1urTRx051__m 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx051__m { 0% {d: path('M22.895273,424.465194C177.154143,424.465194,243.003126,327.845194,332.775273,327.845194C428.008661,327.845194,443.512757,402.003217,423.845273,393.395194C395.14889,380.835422,501.718385,327.012594,654.175273,424.465194C806.632161,521.917794,948.774938,521.339531,1059.875273,446.035194C1170.975608,370.730857,1059.875273,446.035194,1059.875273,446.035194')} 100% {d: path('M16.144726,419.578639C16.144726,419.578639,-122.220084,424.465194,22.895273,424.465194C168.01063,424.465194,248.235637,327.845194,332.775273,327.845194C426.760007,327.845196,443.223256,401.771351,423.845273,393.395194C396.464484,381.559814,500.145981,325.69812,654.175273,424.465194C841.87918,544.825194,985.346523,497.467435,1059.875273,446.035194')}} #eSfF1urTRx053_to {animation: eSfF1urTRx053_to__to 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx053_to__to { 0% {offset-distance: 0%} 50% {offset-distance: 50.113804%} 100% {offset-distance: 100%}} #eSfF1urTRx053 {animation: eSfF1urTRx053_c_o 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx053_c_o { 0% {opacity: 0} 6.666667% {opacity: 0;animation-timing-function: cubic-bezier(0.42,0,1,1)} 13.333333% {opacity: 1} 86.666667% {opacity: 1;animation-timing-function: cubic-bezier(0,0,0.58,1)} 93.333333% {opacity: 0} 100% {opacity: 0}} #eSfF1urTRx057_tr {animation: eSfF1urTRx057_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx057_tr__tr { 0% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 3.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 6.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 10% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 13.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 16.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 20% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 23.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 26.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 30% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 33.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 36.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 40% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 43.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 46.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 53.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 56.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 60% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 63.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 70% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 73.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 76.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 80% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 86.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 90% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 93.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 96.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(162.38287px,496.76343px) rotate(15deg)}} #eSfF1urTRx058_tr {animation: eSfF1urTRx058_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx058_tr__tr { 0% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 3.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 6.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 10% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 13.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 16.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 20% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 23.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 26.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 30% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 33.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 36.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 40% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 43.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 46.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 53.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 56.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 60% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 63.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 70% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 73.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 76.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 80% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 86.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 90% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 93.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 96.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(154.36px,496.76343px) rotate(-15deg)}} #eSfF1urTRx064_tr {animation: eSfF1urTRx064_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx064_tr__tr { 0% {transform: translate(508.065001px,637.130001px) rotate(1.648815deg);animation-timing-function: cubic-bezier(0.317996,0.384525,0.566797,1)} 33.333333% {transform: translate(508.065001px,637.130001px) rotate(-7.739768deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(508.065001px,637.130001px) rotate(4.48135deg);animation-timing-function: cubic-bezier(0.393595,0,0.711078,0.42101)} 100% {transform: translate(508.065001px,637.130001px) rotate(1.648815deg)}} #eSfF1urTRx069_tr {animation: eSfF1urTRx069_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx069_tr__tr { 0% {transform: translate(630.567323px,753.568542px) rotate(4.84349deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(630.567323px,753.568542px) rotate(-10.601668deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(630.567323px,753.568542px) rotate(4.84349deg)}} #eSfF1urTRx073 {animation: eSfF1urTRx073__m 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx073__m { 0% {d: path('M26.795273,638.255195C330.853581,683.458283,402.794017,398.629487,646.485273,503.395195C948.800988,633.36424,1078.295273,496.138764,1078.295273,170.47596C1078.295273,-155.186841,1078.295273,170.471156,1078.295273,170.471156')} 100% {d: path('M20.044726,633.434808C20.044726,633.434808,-265.047694,584.247177,26.799999,637.029704C318.647692,689.812231,408.622403,395.249657,649.240007,505.171989C993.810626,662.583605,1078.295273,392.392584,1078.295273,170.475195')}} #eSfF1urTRx074_tr {animation: eSfF1urTRx074_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx074_tr__tr { 0% {transform: translate(534.728932px,678px) rotate(0.473115deg);animation-timing-function: cubic-bezier(0.288922,0.57899,0.606405,1)} 16.666667% {transform: translate(534.728932px,678px) rotate(7.113929deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(534.728932px,678px) rotate(-21.538205deg);animation-timing-function: cubic-bezier(0.433203,0,0.682004,0.615475)} 100% {transform: translate(534.728932px,678px) rotate(0.473115deg)}} #eSfF1urTRx076_tr {animation: eSfF1urTRx076_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx076_tr__tr { 0% {transform: translate(533.184227px,644.69328px) rotate(13.027323deg);animation-timing-function: cubic-bezier(0.317996,0.384525,0.566797,1)} 33.333333% {transform: translate(533.184227px,644.69328px) rotate(0deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(533.184227px,644.69328px) rotate(16.957665deg);animation-timing-function: cubic-bezier(0.393595,0,0.711078,0.42101)} 100% {transform: translate(533.184227px,644.69328px) rotate(13.027323deg)}} #eSfF1urTRx077_tr {animation: eSfF1urTRx077_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx077_tr__tr { 0% {transform: translate(532.515394px,602.401853px) rotate(3.689124deg);animation-timing-function: cubic-bezier(0.317996,0.384525,0.566797,1)} 33.333333% {transform: translate(532.515394px,602.401853px) rotate(0deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(532.515394px,602.401853px) rotate(4.802132deg);animation-timing-function: cubic-bezier(0.393595,0,0.711078,0.42101)} 100% {transform: translate(532.515394px,602.401853px) rotate(3.689124deg)}} #eSfF1urTRx078_tr {animation: eSfF1urTRx078_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx078_tr__tr { 0% {transform: translate(533.22px,629.17px) rotate(2.801574deg);animation-timing-function: cubic-bezier(0.288922,0.57899,0.606405,1)} 16.666667% {transform: translate(533.22px,629.17px) rotate(0deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(533.22px,629.17px) rotate(12.087534deg);animation-timing-function: cubic-bezier(0.433203,0,0.682004,0.615475)} 100% {transform: translate(533.22px,629.17px) rotate(2.801574deg)}} #eSfF1urTRx0107_tr {animation: eSfF1urTRx0107_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx0107_tr__tr { 0% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 3.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 6.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 10% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 13.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 16.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 20% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 23.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 26.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 30% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 33.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 36.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 40% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 43.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 46.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 53.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 56.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 60% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 63.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 70% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 73.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 76.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 80% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 86.666667% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 90% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 93.333333% {transform: translate(162.38287px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 96.666667% {transform: translate(162.38287px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(162.38287px,496.76343px) rotate(15deg)}} #eSfF1urTRx0108_tr {animation: eSfF1urTRx0108_tr__tr 3000ms linear infinite normal forwards}@keyframes eSfF1urTRx0108_tr__tr { 0% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 3.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 6.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 10% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 13.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 16.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 20% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 23.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 26.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 30% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 33.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 36.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 40% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 43.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 46.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 50% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 53.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 56.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 60% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 63.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 66.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 70% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 73.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 76.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 80% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 83.333333% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 86.666667% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 90% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 93.333333% {transform: translate(154.36px,496.76343px) rotate(-15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 96.666667% {transform: translate(154.36px,496.76343px) rotate(15deg);animation-timing-function: cubic-bezier(0.42,0,0.58,1)} 100% {transform: translate(154.36px,496.76343px) rotate(-15deg)}}
+]]></style>
+<g transform="matrix(.370371 0 0 0.370371 152.126897-.00034)"><g transform="translate(.164994 0)"><path d="M521.81,1010.66v10.93h-1.11v-8.74l-4.29,7.35h-.55l-4.29-7.31v8.7h-1.11v-10.93h1l4.75,8.1l4.69-8.1Z" fill="#3f3f3f"/><path d="M544.48,1018.67h-6.08l-1.31,2.92h-1.21l5-10.93h1.12l5,10.93h-1.2Zm-.42-.94l-2.62-5.87-2.62,5.87Z" fill="#3f3f3f"/><path d="M564.84,1017.81v3.78h-1.14v-3.78l-4.37-7.15h1.23l3.75,6.13l3.74-6.13h1.16Z" fill="#3f3f3f"/></g><g mask="url(#eSfF1urTRx040)"><g><rect width="1080" height="1080" rx="0" ry="0" transform="matrix(1.779616 0 0 1-426.263708 0)" fill="#ffe6e3"/><g id="eSfF1urTRx010_tr" transform="translate(603.21,786.54) rotate(-1.294744)"><path d="M603.14,786.54c9.93-238.75,21-409.13,74.67-635.64c0,0,12.41,125.38,9.6,254.53L644.12,630.08Z" transform="translate(-603.21,-786.54)" fill="#abd85d"/></g><g id="eSfF1urTRx011_tr" transform="translate(611.411825,786.54) rotate(4.406352)"><path d="M603.21,785l36.35-271.22c0,0,30.11-264.2,98.54-383.93L711.93,446.33L620.91,789Z" transform="translate(-611.411825,-786.54)" fill="#7ea04d"/></g><g id="eSfF1urTRx012_tr" transform="translate(426.765001,723.07) rotate(2.909731)"><path d="M304.58,451.3c-1.59-83,103.57,131.4,122.18,271.77c0,0-120.61-189.57-122.18-271.77Z" transform="translate(-426.764999,-723.07)" fill="#bfe85f"/></g><g id="eSfF1urTRx013_tr" transform="translate(399.860001,721.48) rotate(-3.547416)"><path d="M296.07,555.94c-8.49-53.75,79.08,76,103.79,165.54c0,0-95.38-112.29-103.79-165.54Z" transform="translate(-399.86,-721.479998)" fill="#bfe85f"/></g><g id="eSfF1urTRx014_tr" transform="translate(453.670001,782.2) rotate(0)"><g transform="translate(-453.669999,-782.2)"><path d="M453.67,782.2c0-113.4-53.81-234-53.81-234" fill="none" stroke="#3f3f3f" stroke-width="4" stroke-miterlimit="10"/><g id="eSfF1urTRx016_tr" transform="translate(421.57,605.5) rotate(-13.084234)"><path d="M226.23,414c0,0,97.67,57.68,195.34,191.5v0c-42.577198-17.984442-79.344893-47.404136-106.23-85-26.979095-37.693297-56.767188-73.294598-89.11-106.5Z" transform="translate(-421.569997,-605.5)" fill="#3f3f3f"/></g><g id="eSfF1urTRx017_tr" transform="translate(406.45,563.57) rotate(-2.839713)"><path d="M406.45,563.57C363,364.62,234.27,294.4,234.27,294.4s49.16,98.77,93.63,175.78Z" transform="translate(-406.449998,-563.569994)" fill="#3f3f3f"/></g></g></g><g id="eSfF1urTRx018_tr" transform="translate(698.42,738.500001) rotate(15.92348)"><g transform="translate(-698.42,-738.5)"><path d="M698.42,738.5c0-54.21,26.65-135.82,33.24-149.35" fill="none" stroke="#3f3f3f" stroke-width="4" stroke-miterlimit="10"/><g id="eSfF1urTRx020_tr" transform="translate(709.030001,660.81) rotate(0)"><path d="M820.33,522.09c43.78-23.33-41.94,90.78-111.68,138.72c0,0,68.35-115.61,111.68-138.72Z" transform="translate(-709.030001,-660.809999)" fill="#3f3f3f"/></g><g id="eSfF1urTRx021_tr" transform="translate(720.933098,614.84) rotate(0)"><path d="M720.53,614.84C753.07,463,799.42,398.34,807.62,406c10.74,10.09-28.31,124.22-87.09,208.8" transform="translate(-720.933097,-614.84)" fill="#3f3f3f"/></g></g></g><g id="eSfF1urTRx022_tr" transform="translate(499.620001,740) rotate(-9.698528)"><g transform="translate(-499.62,-740)"><path d="M637.16,175.26c-215.53,184.28-277,354.94-137.78,565.17v0C803.54,534.29,637.16,175.26,637.16,175.26Z" fill="#3f3f3f"/><path d="M499.62,740q8-21.65,15.69-43.4c5.09-14.52,10-29.09,14.93-43.66s9.62-29.22,14.23-43.89s9.11-29.37,13.58-44.09v.17c.45-2.33,1-4.69,1.6-7c.64992-2.336393,1.42436-4.636346,2.32-6.89l-.06.19c8.44-30.88,16.66-61.81,24.24-92.9s14.73-62.28,21.22-93.61s12.34-62.8,17.27-94.42l3.56-23.74L631.49,223l3-23.83l2.69-23.87-1.94,24-2.39,23.91L630.08,247l-3.18,23.82c-4.52,31.73-9.79,63.36-16.06,94.79s-13.26,62.71-20.84,93.84-15.87,62.1-24.63,92.92v.1.09c-.861249,2.125469-1.60897,4.295194-2.24,6.5-.63,2.2-1.13,4.46-1.6,6.75v.09.08q-6.82,22.07-14.13,44t-14.9,43.71c-5.08,14.54-10.4,29-15.86,43.37s-11.17,28.7-17.02,42.94Z" fill="#7ea04d"/><path d="M518.65,294.4c3.07,7.09,6.05,14.22,9,21.35s6,14.25,8.9,21.41s5.86,14.3,8.76,21.46s5.8,14.33,8.65,21.51c5.76,14.34,11.39,28.73,17,43.11l8.38,21.61q4.2,10.8,8.31,21.64l-3-.65l24.18-23l24.27-22.92l12.17-11.43L657.6,397.1c8.15-7.58,16.29-15.18,24.51-22.68-7.8,7.95-15.67,15.81-23.53,23.69l-11.8,11.81-11.85,11.75-23.77,23.45-23.86,23.35-1.94,1.9-1-2.55q-4.32-10.77-8.53-21.56l-8.47-21.57c-5.57-14.42-11.18-28.82-16.65-43.27q-4.14-10.82-8.2-21.68t-8.12-21.74c-2.69-7.24-5.32-14.51-7.94-21.78s-5.27-14.52-7.8-21.82Z" fill="#7ea04d"/><path d="M560.92,559.81c9.1-7.77,18.44-15.22,27.86-22.57c4.69-3.7,9.46-7.28,14.19-10.92l14.33-10.75L631.75,505c4.86-3.46,9.68-7,14.59-10.39c9.77-6.87,19.62-13.63,29.71-20.07-9.1,7.78-18.43,15.24-27.85,22.58-4.69,3.7-9.47,7.28-14.2,10.93l-14.32,10.74-14.46,10.57c-4.86,3.47-9.68,7-14.59,10.39-9.77,6.86-19.63,13.62-29.71,20.06Z" fill="#7ea04d"/></g></g><path d="M479.43,1008.48c163.7,1.94,567,36.69,275.51-205.39s-391.3-.09-427.24,80.56-7.93,122.94,151.73,124.83Z" fill="#ad9993"/><g transform="translate(.000001 0.000001)"><polygon points="709.03,789.72 616.86,802.72 616.86,767.86 709.03,789.72" fill="#3f3f3f"/><path d="M747.87,730.7c35.77,55.34-42.66,68.47-109.06,57-80.76-13.93,11.44-208.05,109.06-57Z" fill="#bab5ac"/><path d="M662,695.16c-1.544765-.76115-3.364598-.716308-4.87.12-4.49,2.41-2.42,8.22,2.59,9.17c6.28,1.18,6.94-7.21,2.28-9.29Z" fill="#d4d2cd"/><path d="M692.93,695.14c-5.68-6-7.3,8.34-2.29,9.29c6.24,1.18,5.79-5.59,2.29-9.29Z" fill="#d4d2cd"/><path d="M671.2,686.49c-6.33-.47-7.48,2-3.59,5.3c6.32,5.32,8.68-4.92,3.59-5.3Z" fill="#d4d2cd"/></g><g transform="translate(0 0.000001)"><polygon points="308.97,857.92 553.69,833.93 349.85,796.23 308.97,857.92" fill="#3f3f3f"/><path d="M439.78,832.55C539.93,833.73,786.66,855,608.34,706.89s-239.4-.06-261.38,49.28-4.86,75.22,92.82,76.38Z" fill="#d4d2cd"/><path d="M454.13,706.74c-8.63,5.77.18,16.35,8,13.46c2.672366-.887081,4.743926-3.022094,5.55-5.72c2.46-7.97-6.61-12.38-13.55-7.74Z" fill="#e0ded9"/><path d="M445.8,669.29c-8.62,5.77-.33,13.16,8,13.46c13.49.49-1.06-18.1-8-13.46Z" fill="#e0ded9"/><path d="M484.57,705.16c7.93-6.7,6.41-10.93-1.89-10.3-13.47,1.03-4.48,15.69,1.89,10.3Z" fill="#e0ded9"/></g></g><mask id="eSfF1urTRx040" mask-type="luminance" x="-150%" y="-150%" height="400%" width="400%"><path d="M853.81,480.61C853.81,743.75,540,957.5,540,957.5s-313.81-213.75-313.81-476.89C226.19,307.3,366.69,166.8,540,166.8s313.81,140.5,313.81,313.81Z" fill="#fff"/></mask></g><g><g id="eSfF1urTRx043_tr" transform="translate(649.24,682.19) rotate(7.617458)"><path d="M678,678.92l-28.76,3.27l30.3-206.7L798,219.38c0,0-16.7,170.37-95.89,395.07Z" transform="translate(-649.239989,-682.189975)" fill="#abd85d"/></g><g id="eSfF1urTRx044_tr" transform="translate(459,637.130001) rotate(4.741566)"><g transform="translate(-459,-637.13)"><path d="M384.35,160.43c-141.14,297.41,17.78,376.89,73.4,427.81v0c180.3-226.45-73.4-427.81-73.4-427.81Z" fill="#7ea04d"/><path d="M458.91,637.13L458.36,622l-.48-15.13-.47-15.13-.12-3.78-.24-3.77-.48-7.56-1.75-30.2c-.16-2.52-.24-5-.48-7.55l-.66-7.53-1.32-15.07L451,501.21c-.24-2.51-.4-5-.67-7.53l-.84-7.52-3.34-30.05c-.51-5-1.25-10-1.91-15l-2-15-2-15c-.73-5-1.57-10-2.35-14.94-6-39.88-13.63-79.5-22.35-118.87l-1.61-7.39-1.74-7.36-3.48-14.72c-1.12-4.92-2.43-9.79-3.66-14.67l-3.76-14.66c-5.17-19.49-10.56-38.95-16.94-58.1.46,1.18.94,2.34,1.38,3.53l1.29,3.56l1.29,3.56l1.23,3.58l2.42,7.18c.81,2.39,1.55,4.8,2.32,7.2c3.15,9.6,6,19.3,8.9,29c1.38,4.86,2.69,9.73,4,14.6s2.73,9.73,3.94,14.63l3.76,14.68l1.87,7.34l1.75,7.38l3.5,14.75l1.71,7.38c.57,2.46,1,4.94,1.58,7.41c2.05,9.9,4.19,19.77,6.16,29.68L437,365.67c1,5,1.67,10,2.5,14.95l2.39,15c.76,5,1.6,10,2.31,15l2,15l2,15c.64,5,1.38,10,1.83,15.05L453,485.82l.77,7.54c.25,2.51.4,5,.58,7.56L455.41,516l1,15.11.53,7.56c.19,2.52.22,5,.34,7.57l1.19,30.28.26,7.56.12,3.79v3.79v15.15L459,622Z" fill="#3f3f3f"/><path d="M330.82,324.6c5.2,6.31,10.32,12.69,15.44,19.06s10.26,12.73,15.32,19.14s10.16,12.82,15.2,19.25s10.1,12.85,15.11,19.31c10.07,12.88,20,25.84,30,38.79l14.88,19.49q7.46,9.74,14.82,19.53h-2.88L466.57,457l18-22.11l9-11l9.08-11c6.06-7.31,12.1-14.64,18.24-21.89-5.65,7.63-11.4,15.19-17.14,22.76l-8.6,11.36-8.67,11.31-17.4,22.55-17.51,22.47-1.43,1.84-1.45-1.86q-7.55-9.66-15-19.38l-14.95-19.44c-9.91-13-19.84-26-29.66-39q-7.4-9.78-14.72-19.61t-14.63-19.68q-7.32-9.84-14.51-19.77c-4.83-6.69-9.66-13.28-14.4-19.95Z" fill="#3f3f3f"/><path d="M351,474.57c9,3.88,17.84,8.11,26.61,12.46c4.4,2.14,8.73,4.41,13.09,6.62l13,6.83l12.89,7c4.26,2.4,8.55,4.74,12.78,7.21c8.48,4.87,16.9,9.86,25.14,15.21-9-3.88-17.85-8.11-26.61-12.46-4.4-2.14-8.73-4.42-13.1-6.62l-13-6.83L389,497c-4.26-2.41-8.55-4.75-12.78-7.22-8.53-4.88-16.96-9.87-25.22-15.21Z" fill="#3f3f3f"/><path d="M446.28,446.33c4.28-10.06,8.92-19.94,13.68-29.76c2.35-4.92,4.82-9.78,7.23-14.67l7.44-14.57l7.62-14.47c2.61-4.79,5.15-9.61,7.83-14.36c5.28-9.55,10.69-19,16.45-28.32-4.28,10.06-8.92,19.94-13.68,29.75-2.34,4.93-4.82,9.79-7.24,14.68l-7.43,14.56-7.63,14.47c-2.61,4.79-5.16,9.61-7.83,14.37-5.28,9.54-10.72,18.99-16.44,28.32Z" fill="#3f3f3f"/></g></g><path id="eSfF1urTRx051" d="M22.895273,424.465194c154.25887,0,220.107853-96.62,309.88-96.62c95.233388,0,110.737484,74.158023,91.07,65.55-28.696383-12.559772,77.873112-66.3826,230.33,31.07s294.599665,96.874337,405.7,21.57s0,0,0,0" transform="translate(.000001 0.000002)" fill="none" stroke="#fff" stroke-width="1.5"/><circle r="109.52" transform="translate(540.63 495.98)" fill="#fff"/><g id="eSfF1urTRx053_to" style="offset-path:path('M-410.741924,578.279501C-83.451058,262.976027,388.990776,429.150274,540.082317,549.365228C691.173858,669.580182,1172.597452,810.984316,1479.254863,476.791826');offset-rotate:auto"><g id="eSfF1urTRx053" transform="translate(-159.300003,-499.184677)" opacity="0"><path d="M156,525.27c0,0,5.89-2.92,4.51-8h6.86c.550146,3.16406-.749714,6.365207-3.35,8.25" fill="none" stroke="#3f3f3f" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M154.36,517.3c-.798548,3.456558-3.529081,6.136381-7,6.87" fill="none" stroke="#3f3f3f" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><g transform="translate(.000001 0)"><g id="eSfF1urTRx057_tr" transform="translate(162.38287,496.76343) rotate(15)"><path d="M159.89,496.52c-3.54-23.43,5.13-25.52,8.55-22.15c4.2,4.13-1.29,17.2-5.05,22.94Z" transform="translate(-162.382868,-496.763425)" fill="#f5f5f5"/></g><g id="eSfF1urTRx058_tr" transform="translate(154.36,496.76343) rotate(-15)"><path d="M152.77,497.31c-13.09-20.53-3.82-26.1.07-24.07c5.19,2.7,4.74,16.72,3.47,23.46Z" transform="translate(-154.36,-496.763422)" fill="#f5f5f5"/></g></g><ellipse rx="27.94" ry="13.64" transform="translate(159.3 505.74)" fill="#3f3f3f"/><path d="M161.38,492.13L163,519.31c2-.09,3.84-.15,5.7-.41l4.3-25.49c-3.812253-.865982-7.710657-1.29541-11.62-1.28Z" fill="#e0ded9"/><path d="M137.06,497.49c.83,5.48,1.81,12,2.73,18c4.050845,1.858466,8.377608,3.044019,12.81,3.51v-26.5c-6.27.62-11.81,2.5-15.54,4.99Z" fill="#e0ded9"/><circle r="4.8" transform="translate(178.7 506.54)" fill="#fff"/><circle r="2.97" transform="translate(176.87 507.99)" fill="#3f3f3f"/></g></g><g id="eSfF1urTRx064_tr" transform="translate(508.065001,637.130001) rotate(1.648815)"><g transform="translate(-508.065,-637.13)"><path d="M523.11,70.11c136.26,198,27.23,312.1-33.07,366.41v0C338,234.45,523.11,70.11,523.11,70.11Z" fill="#abd85d"/><path d="M523.12,70.11L520,87.68l-3,17.58-2.81,17.6-2.64,17.63q-5.24,35.25-9.1,70.69c-2.51,23.62-4.74,47.27-6.38,71s-2.94,47.42-3.64,71.14q-.81,35.6-.54,71.25c.14,23.75.83,47.49,1.87,71.22s2.73,47.43,5.05,71.07l1.79,17.73l2.06,17.71l2.33,17.67l2.54,17.65L504.45,620l-2.78-17.62-2.51-17.66L496.92,567c-2.72-23.64-4.72-47.36-6.18-71.12s-2.2-47.55-2.57-71.34-.15-47.59.32-71.4q2.31-71.4,11-142.34q4.39-35.43,10.21-70.64l3.08-17.58L516,105.07l3.43-17.5Z" fill="#3f3f3f"/><path d="M583.11,199.46c-6.92,10.52-14.15,20.81-21.5,31-3.64,5.13-7.4,10.17-11.1,15.25l-11.28,15.1-11.45,15c-3.88,4.94-7.69,9.93-11.63,14.83-7.81,9.85-15.74,19.62-24,29.14c6.91-10.53,14.14-20.81,21.49-31c3.64-5.12,7.4-10.16,11.1-15.24L536,258.41l11.46-15c3.87-4.95,7.7-9.94,11.63-14.84c7.85-9.82,15.78-19.57,24.02-29.11Z" fill="#3f3f3f"/><path d="M586,281.55c-7.65,7.05-15.42,13.95-23.2,20.85l-11.7,10.29-11.77,10.22q-11.8,10.18-23.67,20.29c-8,6.7-15.84,13.46-23.83,20.1l-1.68,1.39-1.15-1.78c-5-7.3-10.06-14.58-15-21.93l-7.46-11-7.39-11.05c-4.94-7.35-9.8-14.76-14.66-22.17s-9.65-14.87-14.36-22.38c5.37,7.06,10.63,14.19,15.88,21.33s10.45,14.31,15.59,21.53L469.3,328l7.7,10.9c5.13,7.22,10.17,14.5,15.24,21.77l-2.89-.39c7.91-6.74,15.93-13.35,23.89-20s16-13.25,24-19.83l12.1-9.83l12.15-9.77c8.15-6.5,16.28-12.98,24.51-19.3Z" fill="#3f3f3f"/></g></g><g id="eSfF1urTRx069_tr" transform="translate(630.567323,753.568542) rotate(4.84349)"><g transform="translate(-630.567322,-753.568485)"><path d="M631.89,753.27c-6.29-98.52,8.257436-240.35761,8.257436-240.35761" fill="none" stroke="#bfe85f" stroke-width="4" stroke-miterlimit="10"/><path d="M639.53,526.43c6.6-186.54,111.2-270.95,111.2-270.95s-28.15,97.13-55.65,173.87Z" transform="matrix(.987342-.158603 0.158603 0.987342-75.99407 108.145078)" fill="#bfe85f"/></g></g><path id="eSfF1urTRx073" d="M26.795273,638.255195c304.058308,45.203088,375.998744-239.625708,619.69-134.86c302.315715,129.969045,431.81-7.256431,431.81-332.919235s0-.004804,0-.004804" transform="translate(.000001 0.000001)" fill="none" stroke="#fff" stroke-width="1.5"/><g id="eSfF1urTRx074_tr" transform="translate(534.728932,678) rotate(0.473115)"><g transform="translate(-534.728932,-677.999997)"><path d="M536.46,678c-2.86-27-4.83-72.85-2.3-99.71" fill="none" stroke="#bfe85f" stroke-width="4" stroke-miterlimit="10"/><g id="eSfF1urTRx076_tr" transform="translate(533.184227,644.69328) rotate(13.027323)"><path d="M592.17,499c-30.83,30.56-59.28,145.73-59.28,145.73c46.83-58.25,90.4-176.57,59.28-145.73Z" transform="translate(-533.184227,-644.69328)" fill="#bfe85f"/></g><g id="eSfF1urTRx077_tr" transform="translate(532.515394,602.401853) rotate(3.689124)"><path d="M552,404.05c-8.9-4.44-31.7,62-20.68,198.79c28.21-86.5,32.28-192.99,20.68-198.79Z" transform="translate(-532.515394,-602.401853)" fill="#bfe85f"/></g><g id="eSfF1urTRx078_tr" transform="translate(533.22,629.17) rotate(2.801574)"><path d="M475,483c-1,43.4,58.22,146.17,58.22,146.17C526.58,554.71,476,439.2,475,483Z" transform="translate(-533.22,-629.17)" fill="#bfe85f"/></g></g></g><g><g transform="translate(.000001 0)"><path d="M616.49,784.52c19.91-83.7,39-41.22,62.35,17.27c13.59,34.02-79.33,54.15-62.35-17.27Z" fill="#fff"/><path d="M672.52,786.21l-58.11,10.94c.783117-7.405271,2.259593-14.72069,4.41-21.85Z" fill="#3f3f3f"/><path d="M620.18,788.21c42,.5,115.9,1.88,70.64-52.66-50.31-60.64-100.33,0-109.55,20.65s-2.03,31.53,38.91,32.01Z" fill="#ff6e59"/><path d="M640.77,736.16c-6.11,4.08.12,11.58,5.66,9.53c1.893257-.626445,3.360765-2.138763,3.93-4.05c1.76-5.64-4.67-8.77-9.59-5.48Z" fill="#fff"/><path d="M600.17,741.56c-6.11,4.09-.24,9.32,5.66,9.54c9.56.34-.74-12.83-5.66-9.54Z" fill="#fff"/><path d="M636.14,759.72c-9.54.73-3.18,11.12,1.34,7.3c5.62-4.75,4.52-7.75-1.34-7.3Z" fill="#fff"/><path d="M658.61,723.25c-3.26-.65-3.67,3.75-1.24,4.87.802975.414597,1.757025.414597,2.56,0c2.37-1.29,1.31-4.35-1.32-4.87Z" fill="#fff"/><path d="M615.45,756.56c-1.76-.35-2,2-.67,2.61.430391.219083.939609.219083,1.37,0c1.27-.69.71-2.33-.7-2.61Z" fill="#fff"/><path d="M629.25,720.7c-1.76-.34-2,2-.67,2.61.427873.229338.942127.229338,1.37,0c1.27-.68.71-2.31-.7-2.61Z" fill="#fff"/><path d="M669.27,747.47c-3.86-.77-4.34,4.44-1.47,5.76.94946.468498,2.066679.449877,3-.05c2.84-1.47,1.58-5.1-1.53-5.71Z" fill="#fff"/><path d="M622.48,734.89c-5-1-4.68,4.43-1.9,7.42c4.5,4.84,5.9-6.63,1.9-7.42Z" fill="#fff"/><path d="M649.72,715.88c-7.27-6.23-10.11,5.62-4.22,6.11c7.33.61,8.69-2.27,4.22-6.11Z" fill="#fff"/><path d="M685.09,740.43c-.6-9.55-11.08-3.32-7.32,1.24c4.67,5.68,7.69,4.65,7.32-1.24Z" fill="#fff"/></g><g><path d="M605,818.59c-18.39-55-29.92-31.65-47.86,13.26C546.66,858,623,872.52,605,818.59Z" fill="#fff"/><path d="M556.33,839l34.1-.25L560,825c0,0-5.25,8.59-3.67,14Z" fill="#3f3f3f"/><path d="M563.92,833.34c-35.75-17.43-26.87-65.92,18.57-69.36c75.51-5.72,62.65,108.96-18.57,69.36Z" fill="#ff8675"/><path d="M591.13,787.66c-6.5,4.82-12-4.42-7.78-9.4c1.356483-1.72611,3.467663-2.68472,5.66-2.57c6.5.31,7.35,8.1,2.12,11.97Z" fill="#fff"/><path d="M584.94,800.87c-.64,4.29-6.21,2.86-6.52-.61-.142012-1.168555.294639-2.33296,1.17-3.12c2.57-2.37,5.86.28,5.35,3.73Z" fill="#fff"/><path d="M610,805.1c-1.41,9.52-13.76,6.33-14.44-1.35-.314919-2.592792.655672-5.176059,2.6-6.92c5.64-5.23,12.93.62,11.84,8.27Z" fill="#fff"/></g><path d="M639.8,684.37c0,0,22.52-20.08,54.67-5.76Z" fill="#bab5ac"/><path d="M493.15,644.75C511.51,793.32,596,697,596,697s-51.42-43.12-102.85-52.25Z" fill="#d4d2cd"/></g></g></g></svg>
diff --git a/site/views/components/esl-lazy-template.njk b/site/views/components/esl-lazy-template.njk
new file mode 100644
index 000000000..eff65ae92
--- /dev/null
+++ b/site/views/components/esl-lazy-template.njk
@@ -0,0 +1,13 @@
+---
+layout: content
+title: ESL Lazy Template
+seoTitle: ESL Lazy Template is a custom mixin that can make parts of the page markup lazy, which will have a good effect on the performance of pages
+name: ESL Lazy Template
+tags: [components, beta]
+aside:
+  source: src/modules/esl-lazy-template
+  examples:
+    - lazy-template
+---
+
+{% mdRender 'src/modules/esl-lazy-template/README.md', 'intro' %}
diff --git a/site/views/examples/lazy-template.njk b/site/views/examples/lazy-template.njk
new file mode 100644
index 000000000..edd844453
--- /dev/null
+++ b/site/views/examples/lazy-template.njk
@@ -0,0 +1,147 @@
+---
+layout: content
+title: Lazy Template
+seoTitle: Lazy-loaded templates examples based on ESL web components
+name: Lazy Template
+tags: [examples, beta]
+icon: examples/lazy-template.svg
+aside:
+  components:
+    - esl-lazy-template
+---
+{% import 'lorem.njk' as lorem %}
+
+{% set imageSrcBase = '/assets/' | url %}
+
+<section class="row">
+  <div class="col-12">
+    <uip-root>
+      <script type="text/html"
+              label="Markup from content of TEMPLATE element"
+              uip-snippet
+              uip-snippet-js="js-snippet-lazy-template">
+        <div class="d-flex">
+          <div class="col-sm-6">
+            <!-- paragraph 13 -->
+            <template esl-lazy-template>
+              <div id="i-am-from-markup-1"
+                  class="text-center"
+                  distance-to-viewport-alert
+                  style="background: lightyellow; border: 3px dashed darkorange;">
+                <p>...</p>
+                <p>I am content No.1 which was added to DOM by the lazy template from its own content</p>
+                <p>I am inside DIV with id="i-am-from-markup-1".</p>
+                <p>...</p>
+              </div>
+            </template>
+            <!-- paragraph 12 -->
+            <template id="q2" esl-lazy-template>
+              <div id="i-am-from-markup-2"
+                  class="text-center"
+                  distance-to-viewport-alert
+                  style="background: lightyellow; border: 3px dashed darkorange;">
+                <p>...</p>
+                <p>I am content No.2 which was added to DOM by the lazy template from its own content</p>
+                <p>I am inside DIV with id="i-am-from-markup-2".</p>
+                <p>...</p>
+              </div>
+            </template>
+            <!-- paragraph 11 -->
+          </div>
+          <div class="col-sm-6">
+            <h3>Lazy markup from content of TEMPLATE element</h3>
+            <p>The ESLLazyTemplate has to add its content to the DOM (replace itself with content). The content is not replaced immediately, but only when the location of the element with the deferred template is close to the viewport. In general, it is also possible that it will not be replaced at all if the user does not scroll the page.</p>
+            <p>If there is no content in the template, replacing it with nothing will actually turn it into a deletion.</p>
+          </div>
+        </div>
+      </script>
+
+      <script type="text/html"
+              label="Markup from URL on TEMPLATE tag"
+              uip-snippet
+              uip-snippet-js="js-snippet-lazy-template">
+        <div class="d-flex">
+          <div class="col-sm-6">
+            <!-- paragraph 14 -->
+            <template esl-lazy-template="/assets/lazy-templates/template1.html"></template>
+            <!-- paragraph 12 -->
+            <template esl-lazy-template="/assets/lazy-templates/template2.html"></template>
+            <!-- paragraph 11 -->
+            <!-- broken begin -->
+            <template esl-lazy-template="/assets/lazy-templates/template3.html"></template>
+            <!-- broken end -->
+            <p>Paragraph after not loaded template</p>
+          </div>
+          <div class="col-sm-6">
+            <h3>Lazy markup from URL on TEMPLATE tag</h3>
+            <p>The ESLLazyTemplate should add the content to the DOM that is located at the specified URL. The content request is not made immediately, but only when the location of the element with the lazy template approaches the viewport. In general, it is also possible that it will not be loaded at all if the user does not scroll the page.</p>
+            <p>When it's time to load, ESLLazyTemplate attempts to fetch the content and, if the request is successful, replaces itself with this content. If it fails to load the content, it is simply deleted.</p>
+          </div>
+        </div>
+      </script>
+
+      <script type="text/html"
+              label="Markup from URL on DIV tag"
+              uip-snippet
+              uip-snippet-js="js-snippet-lazy-template">
+        <div class="d-flex">
+          <div class="col-sm-6">
+            <!-- paragraph 15 -->
+            <div esl-lazy-template="/assets/lazy-templates/template1.html">... I should be replaced by a loaded template ...</div>
+            <!-- paragraph 14 -->
+            <div esl-lazy-template="/assets/lazy-templates/template2.html">... I should be replaced by a loaded template ...</div>
+            <!-- paragraph 12 -->
+            <div esl-lazy-template="/assets/lazy-templates/template3.html">... I should be replaced by a loaded template ...</div>
+          </div>
+          <div class="col-sm-6">
+            <h3>Lazy markup from URL on DIV tag</h3>
+            <p>The ESLLazyTemplate should add the content to the DOM that is located at the specified URL. The content request is not made immediately, but only when the location of the element with the lazy template approaches the viewport. In general, it is also possible that it will not be loaded at all if the user does not scroll the page.</p>
+            <p>When it's time to load, ESLLazyTemplate attempts to fetch the content and, if the request is successful, replaces itself with this content. If it fails to load the content, it is simply deleted.</p>
+            <p>The DIV can have some custom content, but it will exist only before the template is loaded and the DIV is replaced with the content of the loaded template.</p>
+            <p></p>
+          </div>
+        </div>
+      </script>
+
+      <script type="text/html"
+              label="Markup with lazy inline SVG images"
+              uip-snippet
+              uip-snippet-js="js-snippet-lazy-template">
+        <div class="d-flex esl-lazy-template-svg-test">
+          <div class="col-sm-6">
+            <p>Whether you’re at the beginning of your SVG animation journey or you’re a seasoned professional looking for some inspiring SVG animation examples, you’ve come to the right place.</p>
+            <p>These simple SVG CSS animation examples show that subtle movements and basic animators do a great job of adding a competitive edge to your design.</p>
+            <p>If we’re talking about simple animations, CSS is the easiest way to get something moving on the screen. It is a good choice because it is perfect for simple, "one-shot" UI elements like a navigation bar, a loader, or a toggle button. Have a look at these SVG CSS animation examples to get an idea of what you can create when you want to choose this way.</p>
+            <!-- paragraph 7 -->
+            <template esl-lazy-template="/assets/lazy-templates/esl-animated-stroke.svg"></template>
+            <!-- paragraph 5 -->
+            <template esl-lazy-template="/assets/lazy-templates/wind-blowing-in-may-svg-animation.svg"></template>
+            <!-- paragraph 8 -->
+            <template esl-lazy-template="/assets/lazy-templates/esl-noise-distort.svg"></template>
+            <p>We hope you found these SVG animation examples interesting and inspiring. We strongly encourage the extensive use of SVG animations on websites and in apps, due to their many advantages and benefits.</p>
+            <p>Take a look at these SVG animation examples that will convince you that this way is definitely worth trying.</p>
+            <!-- paragraph 9 -->
+            <template esl-lazy-template="/assets/lazy-templates/animated-geometric-shapes-background.svg"></template>
+            <template esl-lazy-template="/assets/lazy-templates/esl-text-squiggly.svg"></template>
+          </div>
+          <div class="col-sm-6">
+            <h3>Lazy markup of SVG from URL on TEMPLATE tag</h3>
+            <p>The ESLLazyTemplate should add the content of SVG images to the DOM that is located at the specified URL. The content request is not made immediately, but only when the location of the element with the lazy SVG approaches the viewport. In general, it is also possible that it will not be loaded at all if the user does not scroll the page.</p>
+            <p>When it's time to load, ESLLazyTemplate attempts to fetch the content and, if the request is successful, replaces itself with this content. If it fails to load the content, it is simply deleted.</p>
+          </div>
+        </div>
+      </script>
+
+      <script id="js-snippet-lazy-template" type="text/plain">
+        import { ESLImage, getViewportForEl } from '@exadel/esl';
+        ESLLazyTemplate.viewportProvider = getViewportForEl;
+        ESLLazyTemplate.register();
+      </script>
+
+      <uip-snippets class="uip-toolbar" dropdown-view="@xs"></uip-snippets>
+      <uip-preview style="max-height: 500px"></uip-preview>
+      <uip-editor label="Source code (HTML)" collapsible copy></uip-editor>
+      <uip-editor source="js" label="Source code (JS)" collapsible collapsed copy></uip-editor>
+    </uip-root>
+  </div>
+</section>
diff --git a/src/modules/all.ts b/src/modules/all.ts
index 85be1b728..0dea26b20 100644
--- a/src/modules/all.ts
+++ b/src/modules/all.ts
@@ -57,3 +57,6 @@ export * from './esl-carousel/core';
 
 // Anchornav
 export * from './esl-anchornav/core';
+
+// Lazy Template
+export * from './esl-lazy-template/core';
diff --git a/src/modules/esl-event-listener/core/descriptors.ts b/src/modules/esl-event-listener/core/descriptors.ts
index 8375d717a..c08be6de8 100644
--- a/src/modules/esl-event-listener/core/descriptors.ts
+++ b/src/modules/esl-event-listener/core/descriptors.ts
@@ -1,4 +1,4 @@
-import {isObject} from '../../esl-utils/misc/object/types';
+import {isObjectLike} from '../../esl-utils/misc/object/types';
 import {isSimilar} from '../../esl-utils/misc/object/compare';
 
 import type {
@@ -55,12 +55,12 @@ function isMatchesDescriptor(
   return false;
 }
 
-/** Gets {@link ESLListenerDescriptorFn}s of the passed object that matches passed criterias */
+/** Gets {@link ESLListenerDescriptorFn}s of the passed any object-like host that matches passed criterias */
 export function getDescriptors(
   host: object,
   ...criteria: ESLListenerDescriptorCriteria[]
 ): ESLListenerDescriptorFn[] {
-  if (!isObject(host)) return [];
+  if (!isObjectLike(host)) return [];
   const keys = getDescriptorsKeysFor(host);
   const values = keys.map((key) => host[key]).filter(isEventDescriptor);
   return values.filter((desc) => criteria.every(isMatchesDescriptor, Object.assign({}, desc)));
diff --git a/src/modules/esl-lazy-template/README.md b/src/modules/esl-lazy-template/README.md
new file mode 100644
index 000000000..bf45b5f28
--- /dev/null
+++ b/src/modules/esl-lazy-template/README.md
@@ -0,0 +1,25 @@
+# [ESL](../../../) Lazy Template Mixin
+
+Version: *1.0.0-beta*.
+
+Authors: *Dmytro Shovchko*.
+
+<a name="intro"></a>
+
+**ESLLazyTemplate** is a custom mixin that can be used in combination with any HTML elements (usually `template` or `div`) to make parts of page markup not present in DOM if they are outside the viewport. It is also possible to not include these invisible parts of the markup in the page markup at once but to load it with a separate request if the user has scrolled the page and the elements marked by the mixin are now in the viewport.
+
+This can be useful if you don't want to load all the content on the page at once, but load it only if the user scrolls to it. For example, some ads from some advertising networks.
+
+To use **ESLLazyTemplate** you need to include the following code:
+```js
+  ESLLazyTemplate.register();
+```
+
+### Lazy Template Mixin Example
+
+```html
+<template esl-lazy-template="/assets/templates/lazy-markup.html"></template>
+<div esl-lazy-template="/assets/templates/lazy-markup.html"></div>
+
+<template esl-lazy-template> /* inline lazy content */ </template>
+```
diff --git a/src/modules/esl-lazy-template/core.ts b/src/modules/esl-lazy-template/core.ts
new file mode 100644
index 000000000..889209a10
--- /dev/null
+++ b/src/modules/esl-lazy-template/core.ts
@@ -0,0 +1,1 @@
+export * from './core/esl-lazy-template';
diff --git a/src/modules/esl-lazy-template/core/esl-lazy-template.ts b/src/modules/esl-lazy-template/core/esl-lazy-template.ts
new file mode 100644
index 000000000..795e92657
--- /dev/null
+++ b/src/modules/esl-lazy-template/core/esl-lazy-template.ts
@@ -0,0 +1,110 @@
+import {ESLMixinElement} from '../../esl-mixin-element/core';
+import {attr, listen, prop, memoize} from '../../esl-utils/decorators';
+import {ESLIntersectionTarget, ESLIntersectionEvent} from '../../esl-event-listener/core/targets/intersection.target';
+import {ExportNs} from '../../esl-utils/environment/export-ns';
+import {getViewportForEl} from '../../esl-utils/dom/scroll';
+
+@ExportNs('LazyTemplate')
+export class ESLLazyTemplate extends ESLMixinElement {
+  public static override is = 'esl-lazy-template';
+
+  @prop(750) protected baseMargin: number;
+  @prop([0, 0.01]) protected INTERSECTION_THRESHOLD: number[];
+
+  /** URL to load content from */
+  @attr({name: ESLLazyTemplate.is})
+  public url?: string;
+
+  /** IntersectionObserver rootMargin value */
+  protected get rootMargin(): string {
+    return `${this.baseMargin * this.connectionRatio}px`;
+  }
+
+  /** Connection speed ratio */
+  protected get connectionRatio(): number {
+    switch (navigator.connection?.effectiveType) {
+      case 'slow-2g':
+      case '2g': return 2;
+      case '3g': return 1.5;
+      case '4g':
+      default: return 1;
+    }
+  }
+
+  /** Host element is a template */
+  protected get isHostTemplate(): boolean {
+    return this.$host instanceof HTMLTemplateElement;
+  }
+
+  /** LazyTemplate placeholder */
+  @memoize()
+  public get $placeholder(): HTMLElement {
+    const placeholder = document.createElement('div');
+    placeholder.className = `${ESLLazyTemplate.is}-placeholder`;
+    this.$host.before(placeholder);
+    return placeholder;
+  }
+
+  /** LazyTemplate viewport (root element for IntersectionObservers checking visibility) */
+  @memoize()
+  protected get $viewport(): Element | undefined {
+    return getViewportForEl(this.$host);
+  }
+
+  protected override disconnectedCallback(): void {
+    super.disconnectedCallback();
+    this.$placeholder.remove();
+    memoize.clear(this, '$placeholder');
+  }
+
+  /** Loads content from the URL */
+  @memoize()
+  protected async loadContent(url: string): Promise<Node | string> {
+    try {
+      const response = await fetch(url);
+      if (!response.ok) return '';
+      const $template = document.createElement('template');
+      $template.innerHTML = await response.text();
+      return $template.content.cloneNode(true);
+    } catch (e) {
+      return '';
+    }
+  }
+
+  /** Gets content from the URL or host template element */
+  protected async getContent(): Promise<string | Node> {
+    if (this.url) return this.loadContent(this.url);
+    if (this.isHostTemplate) return (this.$host as HTMLTemplateElement).content.cloneNode(true);
+    return '';
+  }
+
+  /** Replaces host element with content */
+  protected async replaceWithContent(): Promise<void> {
+    const content = await this.getContent();
+    this.$host.replaceWith(content);
+  }
+
+  @listen({
+    event: ESLIntersectionEvent.IN,
+    target: (that: ESLLazyTemplate) => ESLIntersectionTarget.for(that.$placeholder, {
+      root: that.$viewport,
+      rootMargin: that.rootMargin,
+      threshold: that.INTERSECTION_THRESHOLD
+    })
+  })
+  protected _onIntersect(e: ESLIntersectionEvent): void {
+    this.replaceWithContent();
+  }
+}
+
+declare global {
+  export interface ESLLibrary {
+    LazyTemplate: typeof ESLLazyTemplate;
+  }
+
+  interface Navigator extends NavigatorNetworkInformation {}
+  interface NavigatorNetworkInformation {
+    readonly connection?: {
+      readonly effectiveType: 'slow-2g' | '2g' | '3g' | '4g';};
+  }
+}
diff --git a/src/modules/esl-media/providers/youtube-provider.ts b/src/modules/esl-media/providers/youtube-provider.ts
index 712d8b49a..05893cb9c 100644
--- a/src/modules/esl-media/providers/youtube-provider.ts
+++ b/src/modules/esl-media/providers/youtube-provider.ts
@@ -20,6 +20,8 @@ export class YouTubeProvider extends BaseProvider {
   protected override _el: HTMLDivElement | HTMLIFrameElement;
   protected _api: YT.Player;
 
+  protected _lastPlayerState: PlayerStates = PlayerStates.UNINITIALIZED;
+
   static override parseUrl(url: string): Partial<MediaProviderConfig> | null {
     if (this.providerRegexp.test(url)) {
       const [, id] = url.match(this.idRegexp) || [];
@@ -117,7 +119,8 @@ export class YouTubeProvider extends BaseProvider {
   }
 
   private _onStateChange(event: YT.OnStateChangeEvent): void {
-    switch (+event.data) {
+    const newState = +event.data;
+    switch (newState) {
       case PlayerStates.PLAYING:
         this.component._onPlay();
         break;
@@ -131,7 +134,12 @@ export class YouTubeProvider extends BaseProvider {
           this.component._onEnded();
         }
         break;
+      case PlayerStates.UNSTARTED:
+        if (this._lastPlayerState === PlayerStates.PLAYING || this._lastPlayerState === PlayerStates.PAUSED) this.component._onEnded();
+        break;
     }
+
+    this._lastPlayerState = newState;
   }
 
   protected override onConfigChange(param: ProviderObservedParams, value: boolean): void {


Test patch:
diff --git a/src/modules/esl-event-listener/test/descriptor.test.ts b/src/modules/esl-event-listener/test/descriptor.test.ts
index 347e65694..2a54f0e2b 100644
--- a/src/modules/esl-event-listener/test/descriptor.test.ts
+++ b/src/modules/esl-event-listener/test/descriptor.test.ts
@@ -1,4 +1,5 @@
 import {ESLEventUtils} from '../core';
+import {listen} from '../../esl-utils/decorators/listen';
 
 describe('dom/events: ESLEventUtils: ESLListenerDescriptor Utils', () => {
   describe('ESLEventUtils.isEventDescriptor', () => {
@@ -184,6 +185,17 @@ describe('dom/events: ESLEventUtils: ESLListenerDescriptor Utils', () => {
       expect(ESLEventUtils.descriptors(obj)).toEqual([obj.onEvent]);
     });
 
+    test('ESLEventListener.descriptors: are collected and subscribed in case of any object-like host', () => {
+      class HostClass {
+        @listen({event: 'event-one'})
+        static onEventOne() {}
+        @listen({event: 'event-two'})
+        static onEventTwo() {}
+      }
+      expect(ESLEventUtils.descriptors(HostClass)).toContain(HostClass.onEventOne);
+      expect(ESLEventUtils.descriptors(HostClass)).toContain(HostClass.onEventTwo);
+    });
+
     describe('ESLEventUtils.descriptors: filters by criteria', () => {
       class Test {
         onEvent() {}