kandi background
Explore Kits

jquery | jQuery JavaScript Library | Plugin library

 by   jquery JavaScript Version: 3.6.0 License: MIT

 by   jquery JavaScript Version: 3.6.0 License: MIT

Download this library from

kandi X-RAY | jquery Summary

jquery is a JavaScript library typically used in Plugin, jQuery applications. jquery has no bugs, it has no vulnerabilities, it has a Permissive License and it has medium support. You can install using 'npm i nd-jquery' or download it from GitHub, npm.
To build jQuery, you need to have the latest Node.js/npm and git 1.7 or later. Earlier versions might work, but are not supported. For Windows, you have to download and install [git](https://git-scm.com/downloads) and [Node.js](https://nodejs.org/en/download/). macOS users should install [Homebrew](https://brew.sh/). Once Homebrew is installed, run brew install git to install git, and brew install node to install Node.js. Linux/BSD users should use their appropriate package managers to install git and Node.js, or build from source if you swing that way. Easy-peasy.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • jquery has a medium active ecosystem.
  • It has 55648 star(s) with 20186 fork(s). There are 3307 watchers for this library.
  • It had no major release in the last 12 months.
  • There are 71 open issues and 2083 have been closed. On average issues are closed in 35 days. There are 13 open pull requests and 0 closed requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of jquery is 3.6.0
jquery Support
Best in #Plugin
Average in #Plugin
jquery Support
Best in #Plugin
Average in #Plugin

quality kandi Quality

  • jquery has 0 bugs and 0 code smells.
jquery Quality
Best in #Plugin
Average in #Plugin
jquery Quality
Best in #Plugin
Average in #Plugin

securitySecurity

  • jquery has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • jquery code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
jquery Security
Best in #Plugin
Average in #Plugin
jquery Security
Best in #Plugin
Average in #Plugin

license License

  • jquery is licensed under the MIT License. This license is Permissive.
  • Permissive licenses have the least restrictions, and you can use them in most projects.
jquery License
Best in #Plugin
Average in #Plugin
jquery License
Best in #Plugin
Average in #Plugin

buildReuse

  • jquery releases are available to install and integrate.
  • Deployable package is available in npm.
  • Installation instructions, examples and code snippets are available.
  • jquery saves you 1215 person hours of effort in developing the same functionality from scratch.
  • It has 2736 lines of code, 27 functions and 239 files.
  • It has high code complexity. Code complexity directly impacts maintainability of the code.
jquery Reuse
Best in #Plugin
Average in #Plugin
jquery Reuse
Best in #Plugin
Average in #Plugin
Top functions reviewed by kandi - BETA

kandi has reviewed jquery and discovered the below as its top functions. This is intended to give you an instant insight into jquery implemented functionality, and help decide if they suit your requirements.

  • Default femter implementation
    • creates a promise that is resolved with no more promises .
      • Creates an animation .
        • Creates a new group matcher .
          • Iterates through the results of a single search command .
            • Callback for when the server completes
              • Initialize a new matcher .
                • incoming request
                  • Wraps an event with jQuery .
                    • Build a document fragment

                      Get all kandi verified functions for this library.

                      Get all kandi verified functions for this library.

                      jquery Key Features

                      jQuery JavaScript Library

                      default

                      copy iconCopydownload iconDownload
                      In the spirit of open source software development, jQuery always encourages community code contribution. To help you get started and before you jump into writing code, be sure to read these important contribution guidelines thoroughly:
                      
                      1. [Getting Involved](https://contribute.jquery.org/)
                      2. [Core Style Guide](https://contribute.jquery.org/style-guide/js/)
                      3. [Writing Code for jQuery Foundation Projects](https://contribute.jquery.org/code/)
                      
                      
                      Environments in which to use jQuery

                      How to build your own jQuery

                      copy iconCopydownload iconDownload
                      cd jquery && npm run build

                      Modules

                      copy iconCopydownload iconDownload
                      grunt custom --amd="custom-name"

                      Rails 7 - link_to with method :delete still performs GET request

                      copy iconCopydownload iconDownload
                      <%= link_to "Sign Out", destroy_user_session_path, data: { "turbo-method": :delete } %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path, data: {turbo_method: :delete} %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete,
                        form: {data: {turbo_confirm: 'Are you sure?'}} %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path,
                        data: {turbo_method: :delete, turbo_confirm: 'Are you sure?'} %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path, data: {turbo_method: :delete} %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete,
                        form: {data: {turbo_confirm: 'Are you sure?'}} %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path,
                        data: {turbo_method: :delete, turbo_confirm: 'Are you sure?'} %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path, data: {turbo_method: :delete} %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete,
                        form: {data: {turbo_confirm: 'Are you sure?'}} %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path,
                        data: {turbo_method: :delete, turbo_confirm: 'Are you sure?'} %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path, data: {turbo_method: :delete} %>
                      
                      <%= button_to 'Sign Out', destroy_user_session_path, method: :delete,
                        form: {data: {turbo_confirm: 'Are you sure?'}} %>
                      
                      <%= link_to 'Sign Out', destroy_user_session_path,
                        data: {turbo_method: :delete, turbo_confirm: 'Are you sure?'} %>
                      

                      CSS: How to don't reset onhover animation on every hover

                      copy iconCopydownload iconDownload
                      function moveCircle(e) {
                          TweenLite.to($circle, 0.8, {
                          css: {
                            transform: `translate(${e.pageX}px, ${e.pageY}px)`
                          }
                        });
                      }
                      
                      
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                        <meta charset="utf-8">
                        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reset-css@5.0.1/reset.min.css" />
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/latest/plugins/CSSPlugin.min.js"></script>
                        <style type="text/css">
                          .section {
                            display: block;
                            width: 100%;
                            height: 300px;
                            border-bottom: 1px solid red;
                          }
                          
                          .overlay {
                            position: absolute;
                            top: 0;
                            left: 0;
                            display: none;
                            background: transparent;
                            z-index: -1;
                          }
                          
                          .stack {
                            position: relative;
                            min-width: 300px;
                            min-height: 300px;
                            width: 480px;
                            height: 320px;
                            max-width: 480px;
                            max-height: 320px;
                            overflow: hidden;
                            z-index: 1;
                          }
                          
                          .img {
                            position: absolute;
                            top: 0;
                            left: 0;
                            width: auto;
                            height: auto;
                            max-width: 100%;
                            object-fit: contain;
                            z-index: -1;
                          }
                        </style>
                      </head>
                      
                      <body>
                        <main class="main">
                          <section class="section section-1" data-img="img-1">section 1</section>
                          <section class="section section-2" data-img="img-2">section 2</section>
                          <div class="overlay">
                            <div class="stack">
                              <img id="img-1" class="img" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Coca-cat.jpg">
                              <img id="img-2" class="img" src="https://staticcdn.sk/images/photoarchive/sized/700/2020/07/29/ohrozeny-vtak-krakla-belasa.jpg">
                            </div>
                          </div>
                        </main>
                      
                        <script type="application/javascript">
                          window.onload = () => {
                            const overlay = document.querySelector(".overlay");
                            const stack = document.querySelector(".stack");
                            const s1 = document.querySelector(".section-1");
                            const s2 = document.querySelector(".section-2");
                            const main = document.querySelector(".main");
                      
                            const overlaySize = {
                              width: 480,
                              height: 320
                            };
                            const easeFunc = "sine.inOut";
                            const easeDuration = 0.5;
                      
                            let animation;
                            let activeSection;
                            let currentTarget;
                      
                            function createAnimation() {
                              //console.log('create animation');
                              t1 = gsap.timeline({
                                paused: true
                              });
                              t1.to(currentTarget, {
                                zIndex: 2,
                                display: "block"
                              }, 0);
                              t1.fromTo(currentTarget, {
                                y: "100%"
                              }, {
                                y: 0,
                                duration: easeDuration,
                                ease: easeFunc
                              }, 0);
                              t1.to(currentTarget, {
                                scale: 1.25,
                                transformOrigin: "center",
                                duration: easeDuration,
                                ease: easeFunc
                              }, 0);
                              stack.querySelectorAll(".img").forEach((it) => {
                                if (it !== currentTarget) {
                                  t1.to(it, {
                                    zIndex: -1
                                  }, 0);
                                  t1.to(it, {
                                    scale: 1,
                                    transformOrigin: "center"
                                  }, 0);
                                  t1.to(it, {
                                    display: "none"
                                  }, easeDuration);
                                }
                              });
                              return t1;
                            }
                      
                            function onMouseLeave(e) {
                              const target = e.target;
                              //console.log("leave", e.target);
                              if (target === activeSection) {
                                gsap.set(overlay, {
                                  display: "none"
                                });
                                currentTarget = null;
                              }
                            }
                      
                            function onMouseEnter(e) {
                              currentTarget = stack.querySelector(`#${e.target.dataset.img}`);
                              gsap.set(overlay, {
                                display: "block"
                              });
                              if (!animation) {
                                //console.log("undefined animation")
                                animation = createAnimation();
                                animation.play();
                              } else if (animation.isActive()) {
                                //console.log("still active");
                                animation.timeScale(10); // fast forward the rest of the animation
                                animation = createAnimation();
                                animation.timeScale(1).play();
                              } else {
                                //console.log("no longer active");
                                animation = createAnimation();
                                animation.play();
                              }
                            }
                      
                            function onMouseMove(e) {
                              const hoveredEl = document.elementFromPoint(e.pageX, e.pageY);
                              if (hoveredEl.classList.contains("section")) {
                                if (activeSection !== hoveredEl) {
                                  activeSection = hoveredEl;
                                }
                              } else if (hoveredEl.classList.contains("overlay") || hoveredEl.classList.contains("stack") || hoveredEl.classList.contains("pointer")) {
                                // do nothing
                              } else {
                                if (activeSection) {
                                  activeSection = null;
                                }
                              }
                      
                              if (currentTarget) {
                                // update overlay
                                gsap.set(overlay, {
                                  x: e.pageX - overlaySize.width / 2,
                                  y: e.pageY - overlaySize.height / 2
                                });
                      
                                // add a little horizontal-shift effect
                                const dx = window.innerWidth / 2 - e.pageX;
                                const offsetX = dx / window.innerWidth / 2 * 100;
                                gsap.to(currentTarget, {
                                  x: offsetX * 2,
                                  duration: 2
                                }, 0);
                              }
                            }
                      
                            gsap.set(overlay, {
                              x: 0,
                              y: 0
                            });
                            stack.querySelectorAll('.img').forEach((it) => gsap.set(it, {
                              x: 0,
                              y: "100%"
                            }));
                      
                            window.addEventListener("mousemove", onMouseMove);
                            s1.addEventListener("mouseleave", onMouseLeave);
                            s2.addEventListener("mouseleave", onMouseLeave);
                            s1.addEventListener("mouseenter", onMouseEnter);
                            s2.addEventListener("mouseenter", onMouseEnter);
                          }
                        </script>
                      </body>
                      
                      </html>
                      I have been playing around a little bit with the gsap library today. I've honestly never done anything with or like it. Tried to do it with the x and y params that you may pass to gsap. It will take care of the transformations - also the TimeLine stuff
                      is quite handy. The result is not that great, also the animations look like it could be done better, but maybe it might still help you out. You could also improve some of the logic and animation probably. At least it runs quite stable - performance wise.
                      
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                        <meta charset="utf-8">
                        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reset-css@5.0.1/reset.min.css" />
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/latest/plugins/CSSPlugin.min.js"></script>
                        <style type="text/css">
                          .section {
                            display: block;
                            width: 100%;
                            height: 200px;
                            border-bottom: 1px solid red;
                          }
                          
                          .overlay {
                            position: absolute;
                            top: 0;
                            left: 0;
                            display: none;
                            border: none; // 1px dashed black;
                            background: transparent; // lavender;
                            overflow: hidden;
                          }
                          
                          .stack {
                            position: relative;
                            left: 0;
                            right: 0;
                            top: 0;
                            bottom: 0;
                            min-width: 300px;
                            min-height: 300px;
                            width: 480px;
                            height: 320px;
                            z-index: 0;
                          }
                          
                          .anim-img {
                            position: absolute;
                            top: 0;
                            left: 0;
                            width: auto;
                            height: auto;
                            max-width: 100%;
                            object-fit: contain;
                            z-index: 1;
                          }
                        </style>
                      </head>
                      
                      <body>
                        <main class="main">
                          <section class="section section-1">section 1</section>
                          <section class="section section-2">section 2</section>
                          <div class="overlay">
                            <div class="stack">
                              <img id="img-1" class="anim-img" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Coca-cat.jpg">
                              <img id="img-2" class="anim-img" src="https://staticcdn.sk/images/photoarchive/sized/700/2020/07/29/ohrozeny-vtak-krakla-belasa.jpg">
                            </div>
                          </div>
                        </main>
                      
                        <script type="application/javascript">
                          window.onload = () => {
                            const overlay = document.querySelector(".overlay");
                            const img1 = document.getElementById("img-1");
                            const img2 = document.getElementById("img-2");
                            const s1 = document.querySelector(".section-1");
                            const s2 = document.querySelector(".section-2");
                            const main = document.querySelector(".main");
                      
                            let anim;
                      
                            let isS1active = false;
                            let isS2active = false;
                      
                            let showEl;
                            let hideEl;
                      
                            let leaveTimeout;
                      
                            function reverseFadeInOut(showEl, hideEl) {
                              console.log("create reverse timeline anim -> ", {
                                showEl,
                                hideEl
                              });
                              const tl = gsap.timeline({
                                paused: true
                              });
                              tl
                                .to(showEl, {
                                  zIndex: 1
                                }, 0)
                                .to(hideEl, {
                                  zIndex: 10
                                }, 0)
                                .to(hideEl, {
                                  y: "-100%",
                                  duration: 0.375
                                }, 0)
                                .to(hideEl, {
                                  display: "none"
                                }, 0.375)
                                .to(hideEl, {
                                  zIndex: 1
                                }, 0.375)
                                .to(showEl, {
                                  display: "block",
                                  zIndex: 10
                                }, 0.375)
                                .fromTo(showEl, {
                                  y: "-100%"
                                }, {
                                  y: 0,
                                  duration: .375
                                }, 0.375)
                                .to(hideEl, {
                                  display: "none"
                                });
                              return tl;
                            }
                      
                            function fadeInOut(showEl, hideEl) {
                              console.log("create timeline anim -> ", {
                                showEl,
                                hideEl
                              });
                              const tl = gsap.timeline({
                                paused: true
                              });
                              tl
                                .to(hideEl, {
                                  zIndex: 1
                                }, 0)
                                .to(showEl, {
                                  display: "block",
                                  zIndex: 10
                                }, 0)
                                .fromTo(showEl, {
                                  y: "-100%"
                                }, {
                                  y: 0,
                                  duration: .75
                                }, 0)
                                .fromTo(hideEl, {
                                  y: 0
                                }, {
                                  y: "-100%",
                                  duration: .75
                                }, 0)
                                .to(hideEl, {
                                  display: "none"
                                }, 0.75);
                              return tl;
                            }
                      
                            function animateImage() {
                              if (isS1active || isS2active) {
                                if (isS1active) {
                                  showEl = img1;
                                  hideEl = img2;
                                } else if (isS2active) {
                                  showEl = img2;
                                  hideEl = img1;
                                }
                      
                                if (!anim) {
                                  console.log("create new animation");
                                  anim = fadeInOut(showEl, hideEl);
                                  anim.play();
                                } else {
                                  console.log("anim active:", anim.isActive());
                                  if (anim.isActive()) {
                                    console.log("reverse");
                                    anim.kill();
                                    anim = reverseFadeInOut(showEl, hideEl);
                                    anim.play();
                                  } else {
                                    anim = fadeInOut(showEl, hideEl);
                                    anim.play();
                                  }
                                }
                              }
                            }
                      
                            function moveOverlay(e) {
                              e.preventDefault();
                              e.stopPropagation();
                              gsap.set(overlay, {
                                x: e.pageX + 15,
                                y: e.pageY + 15,
                                display: isS1active || isS2active ? "block" : "none"
                              });
                            }
                      
                            function mouseOver(e, el, isEntering) {
                              e.preventDefault();
                              e.stopPropagation();
                              el.classList.toggle("active");
                              isS1active = s1.classList.contains("active");
                              isS2active = s2.classList.contains("active");
                              if (isEntering) {
                                clearTimeout(leaveTimeout);
                                animateImage();
                              } else {
                                leaveTimeout = setTimeout(() => {
                                  if (anim) {
                                    console.log("kill anim");
                                    anim.kill();
                                    anim = null;
                                  }
                                  gsap.timeline({
                                    onComplete: () => {
                                      console.log("clear props");
                                      gsap.set(".anim-img", {
                                        clearProps: true
                                      });
                                    }
                                  });
                                }, 500);
                              }
                            }
                      
                            gsap.set(overlay, {
                              x: "0",
                              y: "0"
                            });
                            gsap.set(img1, {
                              x: "0",
                              y: "-100%"
                            });
                            gsap.set(img2, {
                              x: "0",
                              y: "-100%"
                            });
                            window.addEventListener("mousemove", moveOverlay);
                            s1.addEventListener("mouseenter", (e) => {
                              mouseOver(e, s1, true);
                            });
                            s1.addEventListener("mouseleave", (e) => {
                              mouseOver(e, s1, false);
                            });
                            s2.addEventListener("mouseenter", (e) => {
                              mouseOver(e, s2, true);
                            });
                            s2.addEventListener("mouseleave", (e) => {
                              mouseOver(e, s2, false);
                            });
                          }
                        </script>
                      </body>
                      
                      </html>
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                        <meta charset="utf-8">
                        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reset-css@5.0.1/reset.min.css" />
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/latest/plugins/CSSPlugin.min.js"></script>
                        <style type="text/css">
                          .section {
                            display: block;
                            width: 100%;
                            height: 300px;
                            border-bottom: 1px solid red;
                          }
                          
                          .overlay {
                            position: absolute;
                            top: 0;
                            left: 0;
                            display: none;
                            background: transparent;
                            z-index: -1;
                          }
                          
                          .stack {
                            position: relative;
                            min-width: 300px;
                            min-height: 300px;
                            width: 480px;
                            height: 320px;
                            max-width: 480px;
                            max-height: 320px;
                            overflow: hidden;
                            z-index: 1;
                          }
                          
                          .img {
                            position: absolute;
                            top: 0;
                            left: 0;
                            width: auto;
                            height: auto;
                            max-width: 100%;
                            object-fit: contain;
                            z-index: -1;
                          }
                        </style>
                      </head>
                      
                      <body>
                        <main class="main">
                          <section class="section section-1" data-img="img-1">section 1</section>
                          <section class="section section-2" data-img="img-2">section 2</section>
                          <div class="overlay">
                            <div class="stack">
                              <img id="img-1" class="img" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Coca-cat.jpg">
                              <img id="img-2" class="img" src="https://staticcdn.sk/images/photoarchive/sized/700/2020/07/29/ohrozeny-vtak-krakla-belasa.jpg">
                            </div>
                          </div>
                        </main>
                      
                        <script type="application/javascript">
                          window.onload = () => {
                            const overlay = document.querySelector(".overlay");
                            const stack = document.querySelector(".stack");
                            const s1 = document.querySelector(".section-1");
                            const s2 = document.querySelector(".section-2");
                            const main = document.querySelector(".main");
                      
                            const overlaySize = {
                              width: 480,
                              height: 320
                            };
                            const easeFunc = "sine.inOut";
                            const easeDuration = 0.5;
                      
                            let animation;
                            let activeSection;
                            let currentTarget;
                      
                            function createAnimation() {
                              //console.log('create animation');
                              t1 = gsap.timeline({
                                paused: true
                              });
                              t1.to(currentTarget, {
                                zIndex: 2,
                                display: "block"
                              }, 0);
                              t1.fromTo(currentTarget, {
                                y: "100%"
                              }, {
                                y: 0,
                                duration: easeDuration,
                                ease: easeFunc
                              }, 0);
                              t1.to(currentTarget, {
                                scale: 1.25,
                                transformOrigin: "center",
                                duration: easeDuration,
                                ease: easeFunc
                              }, 0);
                              stack.querySelectorAll(".img").forEach((it) => {
                                if (it !== currentTarget) {
                                  t1.to(it, {
                                    zIndex: -1
                                  }, 0);
                                  t1.to(it, {
                                    scale: 1,
                                    transformOrigin: "center"
                                  }, 0);
                                  t1.to(it, {
                                    display: "none"
                                  }, easeDuration);
                                }
                              });
                              return t1;
                            }
                      
                            function onMouseLeave(e) {
                              const target = e.target;
                              //console.log("leave", e.target);
                              if (target === activeSection) {
                                gsap.set(overlay, {
                                  display: "none"
                                });
                                currentTarget = null;
                              }
                            }
                      
                            function onMouseEnter(e) {
                              currentTarget = stack.querySelector(`#${e.target.dataset.img}`);
                              gsap.set(overlay, {
                                display: "block"
                              });
                              if (!animation) {
                                //console.log("undefined animation")
                                animation = createAnimation();
                                animation.play();
                              } else if (animation.isActive()) {
                                //console.log("still active");
                                animation.timeScale(10); // fast forward the rest of the animation
                                animation = createAnimation();
                                animation.timeScale(1).play();
                              } else {
                                //console.log("no longer active");
                                animation = createAnimation();
                                animation.play();
                              }
                            }
                      
                            function onMouseMove(e) {
                              const hoveredEl = document.elementFromPoint(e.pageX, e.pageY);
                              if (hoveredEl.classList.contains("section")) {
                                if (activeSection !== hoveredEl) {
                                  activeSection = hoveredEl;
                                }
                              } else if (hoveredEl.classList.contains("overlay") || hoveredEl.classList.contains("stack") || hoveredEl.classList.contains("pointer")) {
                                // do nothing
                              } else {
                                if (activeSection) {
                                  activeSection = null;
                                }
                              }
                      
                              if (currentTarget) {
                                // update overlay
                                gsap.set(overlay, {
                                  x: e.pageX - overlaySize.width / 2,
                                  y: e.pageY - overlaySize.height / 2
                                });
                      
                                // add a little horizontal-shift effect
                                const dx = window.innerWidth / 2 - e.pageX;
                                const offsetX = dx / window.innerWidth / 2 * 100;
                                gsap.to(currentTarget, {
                                  x: offsetX * 2,
                                  duration: 2
                                }, 0);
                              }
                            }
                      
                            gsap.set(overlay, {
                              x: 0,
                              y: 0
                            });
                            stack.querySelectorAll('.img').forEach((it) => gsap.set(it, {
                              x: 0,
                              y: "100%"
                            }));
                      
                            window.addEventListener("mousemove", onMouseMove);
                            s1.addEventListener("mouseleave", onMouseLeave);
                            s2.addEventListener("mouseleave", onMouseLeave);
                            s1.addEventListener("mouseenter", onMouseEnter);
                            s2.addEventListener("mouseenter", onMouseEnter);
                          }
                        </script>
                      </body>
                      
                      </html>
                      I have been playing around a little bit with the gsap library today. I've honestly never done anything with or like it. Tried to do it with the x and y params that you may pass to gsap. It will take care of the transformations - also the TimeLine stuff
                      is quite handy. The result is not that great, also the animations look like it could be done better, but maybe it might still help you out. You could also improve some of the logic and animation probably. At least it runs quite stable - performance wise.
                      
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                        <meta charset="utf-8">
                        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reset-css@5.0.1/reset.min.css" />
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
                        <script type="application/javascript" defer src="https://cdnjs.cloudflare.com/ajax/libs/gsap/latest/plugins/CSSPlugin.min.js"></script>
                        <style type="text/css">
                          .section {
                            display: block;
                            width: 100%;
                            height: 200px;
                            border-bottom: 1px solid red;
                          }
                          
                          .overlay {
                            position: absolute;
                            top: 0;
                            left: 0;
                            display: none;
                            border: none; // 1px dashed black;
                            background: transparent; // lavender;
                            overflow: hidden;
                          }
                          
                          .stack {
                            position: relative;
                            left: 0;
                            right: 0;
                            top: 0;
                            bottom: 0;
                            min-width: 300px;
                            min-height: 300px;
                            width: 480px;
                            height: 320px;
                            z-index: 0;
                          }
                          
                          .anim-img {
                            position: absolute;
                            top: 0;
                            left: 0;
                            width: auto;
                            height: auto;
                            max-width: 100%;
                            object-fit: contain;
                            z-index: 1;
                          }
                        </style>
                      </head>
                      
                      <body>
                        <main class="main">
                          <section class="section section-1">section 1</section>
                          <section class="section section-2">section 2</section>
                          <div class="overlay">
                            <div class="stack">
                              <img id="img-1" class="anim-img" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Coca-cat.jpg">
                              <img id="img-2" class="anim-img" src="https://staticcdn.sk/images/photoarchive/sized/700/2020/07/29/ohrozeny-vtak-krakla-belasa.jpg">
                            </div>
                          </div>
                        </main>
                      
                        <script type="application/javascript">
                          window.onload = () => {
                            const overlay = document.querySelector(".overlay");
                            const img1 = document.getElementById("img-1");
                            const img2 = document.getElementById("img-2");
                            const s1 = document.querySelector(".section-1");
                            const s2 = document.querySelector(".section-2");
                            const main = document.querySelector(".main");
                      
                            let anim;
                      
                            let isS1active = false;
                            let isS2active = false;
                      
                            let showEl;
                            let hideEl;
                      
                            let leaveTimeout;
                      
                            function reverseFadeInOut(showEl, hideEl) {
                              console.log("create reverse timeline anim -> ", {
                                showEl,
                                hideEl
                              });
                              const tl = gsap.timeline({
                                paused: true
                              });
                              tl
                                .to(showEl, {
                                  zIndex: 1
                                }, 0)
                                .to(hideEl, {
                                  zIndex: 10
                                }, 0)
                                .to(hideEl, {
                                  y: "-100%",
                                  duration: 0.375
                                }, 0)
                                .to(hideEl, {
                                  display: "none"
                                }, 0.375)
                                .to(hideEl, {
                                  zIndex: 1
                                }, 0.375)
                                .to(showEl, {
                                  display: "block",
                                  zIndex: 10
                                }, 0.375)
                                .fromTo(showEl, {
                                  y: "-100%"
                                }, {
                                  y: 0,
                                  duration: .375
                                }, 0.375)
                                .to(hideEl, {
                                  display: "none"
                                });
                              return tl;
                            }
                      
                            function fadeInOut(showEl, hideEl) {
                              console.log("create timeline anim -> ", {
                                showEl,
                                hideEl
                              });
                              const tl = gsap.timeline({
                                paused: true
                              });
                              tl
                                .to(hideEl, {
                                  zIndex: 1
                                }, 0)
                                .to(showEl, {
                                  display: "block",
                                  zIndex: 10
                                }, 0)
                                .fromTo(showEl, {
                                  y: "-100%"
                                }, {
                                  y: 0,
                                  duration: .75
                                }, 0)
                                .fromTo(hideEl, {
                                  y: 0
                                }, {
                                  y: "-100%",
                                  duration: .75
                                }, 0)
                                .to(hideEl, {
                                  display: "none"
                                }, 0.75);
                              return tl;
                            }
                      
                            function animateImage() {
                              if (isS1active || isS2active) {
                                if (isS1active) {
                                  showEl = img1;
                                  hideEl = img2;
                                } else if (isS2active) {
                                  showEl = img2;
                                  hideEl = img1;
                                }
                      
                                if (!anim) {
                                  console.log("create new animation");
                                  anim = fadeInOut(showEl, hideEl);
                                  anim.play();
                                } else {
                                  console.log("anim active:", anim.isActive());
                                  if (anim.isActive()) {
                                    console.log("reverse");
                                    anim.kill();
                                    anim = reverseFadeInOut(showEl, hideEl);
                                    anim.play();
                                  } else {
                                    anim = fadeInOut(showEl, hideEl);
                                    anim.play();
                                  }
                                }
                              }
                            }
                      
                            function moveOverlay(e) {
                              e.preventDefault();
                              e.stopPropagation();
                              gsap.set(overlay, {
                                x: e.pageX + 15,
                                y: e.pageY + 15,
                                display: isS1active || isS2active ? "block" : "none"
                              });
                            }
                      
                            function mouseOver(e, el, isEntering) {
                              e.preventDefault();
                              e.stopPropagation();
                              el.classList.toggle("active");
                              isS1active = s1.classList.contains("active");
                              isS2active = s2.classList.contains("active");
                              if (isEntering) {
                                clearTimeout(leaveTimeout);
                                animateImage();
                              } else {
                                leaveTimeout = setTimeout(() => {
                                  if (anim) {
                                    console.log("kill anim");
                                    anim.kill();
                                    anim = null;
                                  }
                                  gsap.timeline({
                                    onComplete: () => {
                                      console.log("clear props");
                                      gsap.set(".anim-img", {
                                        clearProps: true
                                      });
                                    }
                                  });
                                }, 500);
                              }
                            }
                      
                            gsap.set(overlay, {
                              x: "0",
                              y: "0"
                            });
                            gsap.set(img1, {
                              x: "0",
                              y: "-100%"
                            });
                            gsap.set(img2, {
                              x: "0",
                              y: "-100%"
                            });
                            window.addEventListener("mousemove", moveOverlay);
                            s1.addEventListener("mouseenter", (e) => {
                              mouseOver(e, s1, true);
                            });
                            s1.addEventListener("mouseleave", (e) => {
                              mouseOver(e, s1, false);
                            });
                            s2.addEventListener("mouseenter", (e) => {
                              mouseOver(e, s2, true);
                            });
                            s2.addEventListener("mouseleave", (e) => {
                              mouseOver(e, s2, false);
                            });
                          }
                        </script>
                      </body>
                      
                      </html>
                      var $circle = $('#circle');
                      
                      function moveCircle(e) {
                          TweenLite.to($circle, 0.1, {
                          css: {
                            left: e.pageX,
                            top: e.pageY
                          }
                        });
                      }
                      
                      $(window).on('mousemove', moveCircle);
                      @import "compass/css3";
                      
                      @keyframes in {
                          from {
                              transform: translateY(-100%);
                          }
                          to {
                              transform: translateY(0);
                          }
                      }
                      @keyframes out {
                          from {
                              transform: translateY(0);
                          }
                          to {
                             transform: translateY(100%);
                          }
                      }
                      
                      html {
                        background: #0E3741;
                      }
                      
                      #circle {
                        position: absolute;
                        pointer-events : none;
                        width: 400px;
                        height: 200px;
                        top: 50%;
                        left: 50%;
                        margin: -50px 0 0 -50px;
                      }
                      
                      #circle .circle-wrapper {
                          overflow: hidden;
                          width: 400px;
                          height: 200px;
                          position: relative;
                        }
                        
                      #circle img {
                          position: absolute;
                          top: 0;
                          bottom: 0;
                          left: 0;
                          right: 0;
                          width: 400px;
                          height: 200px;
                          object-fit: cover;
                          overflow: hidden;
                        }
                      
                      #wrapper {
                        display: flex;
                        flex-direction: column;
                      }
                      
                      .special-element {
                        width: 100%;
                        height: 100px;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                      }
                      
                      #one {
                        background: blue;
                      }
                      
                      #two {
                        background: red;
                      }
                      
                      #one:hover ~ #circle .circle-wrapper #imgOne {
                        animation: in 1s ease-in-out;
                        z-index: 2;
                      }
                      
                      #one:hover ~ #circle .circle-wrapper #imgTwo {
                        animation: out 1s ease-in-out;
                      }
                      
                      #two:hover ~ #circle .circle-wrapper #imgTwo {
                        animation: in 1s ease-in-out;
                        z-index: 2;
                      }
                      
                      #two:hover ~ #circle .circle-wrapper #imgOne {
                        animation: out 1s ease-in-out;
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.11.4/TweenMax.min.js"></script>
                      
                      <section id="wrapper">
                        <section class="special-element" id="one">
                          section one
                        </section>
                      
                        <section class="special-element" id="two">
                          section two
                        </section>
                        
                        <div id="circle">
                          <div class="circle-wrapper">
                            <img id="imgOne" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Coca-cat.jpg">
                          <img id="imgTwo" src="https://staticcdn.sk/images/photoarchive/sized/700/2020/07/29/ohrozeny-vtak-krakla-belasa.jpg">
                          </div>
                        </div>
                      </section>
                      var $circle = $('#circle');
                      
                      function moveCircle(e) {
                          TweenLite.to($circle, 0.1, {
                          css: {
                            left: e.pageX,
                            top: e.pageY
                          }
                        });
                      }
                      
                      $(window).on('mousemove', moveCircle);
                      @import "compass/css3";
                      
                      @keyframes in {
                          from {
                              transform: translateY(-100%);
                          }
                          to {
                              transform: translateY(0);
                          }
                      }
                      @keyframes out {
                          from {
                              transform: translateY(0);
                          }
                          to {
                             transform: translateY(100%);
                          }
                      }
                      
                      html {
                        background: #0E3741;
                      }
                      
                      #circle {
                        position: absolute;
                        pointer-events : none;
                        width: 400px;
                        height: 200px;
                        top: 50%;
                        left: 50%;
                        margin: -50px 0 0 -50px;
                      }
                      
                      #circle .circle-wrapper {
                          overflow: hidden;
                          width: 400px;
                          height: 200px;
                          position: relative;
                        }
                        
                      #circle img {
                          position: absolute;
                          top: 0;
                          bottom: 0;
                          left: 0;
                          right: 0;
                          width: 400px;
                          height: 200px;
                          object-fit: cover;
                          overflow: hidden;
                        }
                      
                      #wrapper {
                        display: flex;
                        flex-direction: column;
                      }
                      
                      .special-element {
                        width: 100%;
                        height: 100px;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                      }
                      
                      #one {
                        background: blue;
                      }
                      
                      #two {
                        background: red;
                      }
                      
                      #one:hover ~ #circle .circle-wrapper #imgOne {
                        animation: in 1s ease-in-out;
                        z-index: 2;
                      }
                      
                      #one:hover ~ #circle .circle-wrapper #imgTwo {
                        animation: out 1s ease-in-out;
                      }
                      
                      #two:hover ~ #circle .circle-wrapper #imgTwo {
                        animation: in 1s ease-in-out;
                        z-index: 2;
                      }
                      
                      #two:hover ~ #circle .circle-wrapper #imgOne {
                        animation: out 1s ease-in-out;
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.11.4/TweenMax.min.js"></script>
                      
                      <section id="wrapper">
                        <section class="special-element" id="one">
                          section one
                        </section>
                      
                        <section class="special-element" id="two">
                          section two
                        </section>
                        
                        <div id="circle">
                          <div class="circle-wrapper">
                            <img id="imgOne" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Coca-cat.jpg">
                          <img id="imgTwo" src="https://staticcdn.sk/images/photoarchive/sized/700/2020/07/29/ohrozeny-vtak-krakla-belasa.jpg">
                          </div>
                        </div>
                      </section>
                      var $circle = $('#circle');
                      
                      function moveCircle(e) {
                          TweenLite.to($circle, 0.1, {
                          css: {
                            left: e.pageX,
                            top: e.pageY
                          }
                        });
                      }
                      
                      $(window).on('mousemove', moveCircle);
                      @import "compass/css3";
                      
                      @keyframes in {
                          from {
                              transform: translateY(-100%);
                          }
                          to {
                              transform: translateY(0);
                          }
                      }
                      @keyframes out {
                          from {
                              transform: translateY(0);
                          }
                          to {
                             transform: translateY(100%);
                          }
                      }
                      
                      html {
                        background: #0E3741;
                      }
                      
                      #circle {
                        position: absolute;
                        pointer-events : none;
                        width: 400px;
                        height: 200px;
                        top: 50%;
                        left: 50%;
                        margin: -50px 0 0 -50px;
                      }
                      
                      #circle .circle-wrapper {
                          overflow: hidden;
                          width: 400px;
                          height: 200px;
                          position: relative;
                        }
                        
                      #circle img {
                          position: absolute;
                          top: 0;
                          bottom: 0;
                          left: 0;
                          right: 0;
                          width: 400px;
                          height: 200px;
                          object-fit: cover;
                          overflow: hidden;
                        }
                      
                      #wrapper {
                        display: flex;
                        flex-direction: column;
                      }
                      
                      .special-element {
                        width: 100%;
                        height: 100px;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                      }
                      
                      #one {
                        background: blue;
                      }
                      
                      #two {
                        background: red;
                      }
                      
                      #one:hover ~ #circle .circle-wrapper #imgOne {
                        animation: in 1s ease-in-out;
                        z-index: 2;
                      }
                      
                      #one:hover ~ #circle .circle-wrapper #imgTwo {
                        animation: out 1s ease-in-out;
                      }
                      
                      #two:hover ~ #circle .circle-wrapper #imgTwo {
                        animation: in 1s ease-in-out;
                        z-index: 2;
                      }
                      
                      #two:hover ~ #circle .circle-wrapper #imgOne {
                        animation: out 1s ease-in-out;
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.11.4/TweenMax.min.js"></script>
                      
                      <section id="wrapper">
                        <section class="special-element" id="one">
                          section one
                        </section>
                      
                        <section class="special-element" id="two">
                          section two
                        </section>
                        
                        <div id="circle">
                          <div class="circle-wrapper">
                            <img id="imgOne" src="https://upload.wikimedia.org/wikipedia/commons/3/3b/Coca-cat.jpg">
                          <img id="imgTwo" src="https://staticcdn.sk/images/photoarchive/sized/700/2020/07/29/ohrozeny-vtak-krakla-belasa.jpg">
                          </div>
                        </div>
                      </section>
                      <div class="site-footer">
                       <div class="js-scroll-height"></div>
                       <canvas width="780" height="624" class="js-webgl" style="width: 1041px;height: 833px;opacity: 1;border: 1px solid brown;"></canvas>
                      </div>
                      
                      var $cursor = $('#cursor');
                      
                      function movecursor(e) {
                        TweenLite.to($cursor, 0.8, {
                          css: {
                            left: e.pageX,
                            top: e.pageY
                          }
                        });
                      }
                      $(window).on('mousemove', movecursor);
                      
                      let topImg = null;
                      $('.special-element').mouseenter((e) => {
                        //make all images at same level
                        $('.img-wrapper').css({ zIndex: '1' });
                      
                        //make last focused image at second highest level
                        if (topImg) topImg.css({ zIndex: '2' });
                      
                        //make current image as topImage 
                        let atr = $(e.target).attr('data-img');
                        topImg = $('.img-wrapper[data-img="' + atr + '"]');
                        //make it topmost
                        topImg.css({ zIndex: '3' });
                      });
                      :root {
                        --cursor-img-height: 30vh;
                        --cursor-img-width: 30vw;
                      }
                      
                      html,
                      body {
                        background: #0E3741;
                      }
                      
                      #wrapper {
                        display: flex;
                        flex-direction: column;
                      }
                      
                      .special-element {
                        width: 100%;
                        height: 33vh;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        font-size: 2rem;
                      }
                      
                      .special-element:nth-child(1) {
                        background: lightblue;
                      }
                      
                      .special-element:nth-child(2) {
                        background: lightcoral;
                      }
                      
                      .special-element:nth-child(3) {
                        background: lightgreen;
                      }
                      
                      #cursor {
                        position: absolute;
                        pointer-events: none;
                        margin: 0;
                        margin-top: calc(var(--cursor-img-height) * -0.5);
                        margin-left: calc(var(--cursor-img-width) * -0.5);
                        overflow: hidden;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                      }
                      
                      .img-wrapper {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        overflow: hidden;
                      }
                      
                      .img-wrapper>img {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        object-fit: fill;
                        z-index: 1;
                      }
                      
                      .special-element[data-img="one"]:hover~#cursor [data-img="one"],
                      .special-element[data-img="two"]:hover~#cursor [data-img="two"],
                      .special-element[data-img="three"]:hover~#cursor [data-img="three"] {
                        animation: slide .8s ease-in-out;
                      }
                      
                      @keyframes slide {
                        from {
                          height: 0px;
                          transform: scale(1.2);
                        }
                        to {
                          height: (--cursor-img-height);
                          transform: scale(1);
                        }
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.11.4/TweenMax.min.js"></script>
                      
                      <section id="wrapper">
                        <section class="special-element" data-img="one">food</section>
                        <section class="special-element" data-img="two">animal</section>
                        <section class="special-element" data-img="three">night</section>
                      
                        <div id="cursor">
                          <div class="img-wrapper" data-img='one'>
                            <img src="https://picsum.photos/id/674/400/200">
                          </div>
                          <div class="img-wrapper" data-img='two'>
                            <img src="https://picsum.photos/id/433/400/200">
                          </div>
                          <div class="img-wrapper" data-img='three'>
                            <img src="https://picsum.photos/id/901/400/200">
                          </div>
                        </div>
                      </section>
                      <div class="site-footer">
                       <div class="js-scroll-height"></div>
                       <canvas width="780" height="624" class="js-webgl" style="width: 1041px;height: 833px;opacity: 1;border: 1px solid brown;"></canvas>
                      </div>
                      
                      var $cursor = $('#cursor');
                      
                      function movecursor(e) {
                        TweenLite.to($cursor, 0.8, {
                          css: {
                            left: e.pageX,
                            top: e.pageY
                          }
                        });
                      }
                      $(window).on('mousemove', movecursor);
                      
                      let topImg = null;
                      $('.special-element').mouseenter((e) => {
                        //make all images at same level
                        $('.img-wrapper').css({ zIndex: '1' });
                      
                        //make last focused image at second highest level
                        if (topImg) topImg.css({ zIndex: '2' });
                      
                        //make current image as topImage 
                        let atr = $(e.target).attr('data-img');
                        topImg = $('.img-wrapper[data-img="' + atr + '"]');
                        //make it topmost
                        topImg.css({ zIndex: '3' });
                      });
                      :root {
                        --cursor-img-height: 30vh;
                        --cursor-img-width: 30vw;
                      }
                      
                      html,
                      body {
                        background: #0E3741;
                      }
                      
                      #wrapper {
                        display: flex;
                        flex-direction: column;
                      }
                      
                      .special-element {
                        width: 100%;
                        height: 33vh;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        font-size: 2rem;
                      }
                      
                      .special-element:nth-child(1) {
                        background: lightblue;
                      }
                      
                      .special-element:nth-child(2) {
                        background: lightcoral;
                      }
                      
                      .special-element:nth-child(3) {
                        background: lightgreen;
                      }
                      
                      #cursor {
                        position: absolute;
                        pointer-events: none;
                        margin: 0;
                        margin-top: calc(var(--cursor-img-height) * -0.5);
                        margin-left: calc(var(--cursor-img-width) * -0.5);
                        overflow: hidden;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                      }
                      
                      .img-wrapper {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        overflow: hidden;
                      }
                      
                      .img-wrapper>img {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        object-fit: fill;
                        z-index: 1;
                      }
                      
                      .special-element[data-img="one"]:hover~#cursor [data-img="one"],
                      .special-element[data-img="two"]:hover~#cursor [data-img="two"],
                      .special-element[data-img="three"]:hover~#cursor [data-img="three"] {
                        animation: slide .8s ease-in-out;
                      }
                      
                      @keyframes slide {
                        from {
                          height: 0px;
                          transform: scale(1.2);
                        }
                        to {
                          height: (--cursor-img-height);
                          transform: scale(1);
                        }
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.11.4/TweenMax.min.js"></script>
                      
                      <section id="wrapper">
                        <section class="special-element" data-img="one">food</section>
                        <section class="special-element" data-img="two">animal</section>
                        <section class="special-element" data-img="three">night</section>
                      
                        <div id="cursor">
                          <div class="img-wrapper" data-img='one'>
                            <img src="https://picsum.photos/id/674/400/200">
                          </div>
                          <div class="img-wrapper" data-img='two'>
                            <img src="https://picsum.photos/id/433/400/200">
                          </div>
                          <div class="img-wrapper" data-img='three'>
                            <img src="https://picsum.photos/id/901/400/200">
                          </div>
                        </div>
                      </section>
                      <div class="site-footer">
                       <div class="js-scroll-height"></div>
                       <canvas width="780" height="624" class="js-webgl" style="width: 1041px;height: 833px;opacity: 1;border: 1px solid brown;"></canvas>
                      </div>
                      
                      var $cursor = $('#cursor');
                      
                      function movecursor(e) {
                        TweenLite.to($cursor, 0.8, {
                          css: {
                            left: e.pageX,
                            top: e.pageY
                          }
                        });
                      }
                      $(window).on('mousemove', movecursor);
                      
                      let topImg = null;
                      $('.special-element').mouseenter((e) => {
                        //make all images at same level
                        $('.img-wrapper').css({ zIndex: '1' });
                      
                        //make last focused image at second highest level
                        if (topImg) topImg.css({ zIndex: '2' });
                      
                        //make current image as topImage 
                        let atr = $(e.target).attr('data-img');
                        topImg = $('.img-wrapper[data-img="' + atr + '"]');
                        //make it topmost
                        topImg.css({ zIndex: '3' });
                      });
                      :root {
                        --cursor-img-height: 30vh;
                        --cursor-img-width: 30vw;
                      }
                      
                      html,
                      body {
                        background: #0E3741;
                      }
                      
                      #wrapper {
                        display: flex;
                        flex-direction: column;
                      }
                      
                      .special-element {
                        width: 100%;
                        height: 33vh;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        font-size: 2rem;
                      }
                      
                      .special-element:nth-child(1) {
                        background: lightblue;
                      }
                      
                      .special-element:nth-child(2) {
                        background: lightcoral;
                      }
                      
                      .special-element:nth-child(3) {
                        background: lightgreen;
                      }
                      
                      #cursor {
                        position: absolute;
                        pointer-events: none;
                        margin: 0;
                        margin-top: calc(var(--cursor-img-height) * -0.5);
                        margin-left: calc(var(--cursor-img-width) * -0.5);
                        overflow: hidden;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                      }
                      
                      .img-wrapper {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        overflow: hidden;
                      }
                      
                      .img-wrapper>img {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        object-fit: fill;
                        z-index: 1;
                      }
                      
                      .special-element[data-img="one"]:hover~#cursor [data-img="one"],
                      .special-element[data-img="two"]:hover~#cursor [data-img="two"],
                      .special-element[data-img="three"]:hover~#cursor [data-img="three"] {
                        animation: slide .8s ease-in-out;
                      }
                      
                      @keyframes slide {
                        from {
                          height: 0px;
                          transform: scale(1.2);
                        }
                        to {
                          height: (--cursor-img-height);
                          transform: scale(1);
                        }
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.11.4/TweenMax.min.js"></script>
                      
                      <section id="wrapper">
                        <section class="special-element" data-img="one">food</section>
                        <section class="special-element" data-img="two">animal</section>
                        <section class="special-element" data-img="three">night</section>
                      
                        <div id="cursor">
                          <div class="img-wrapper" data-img='one'>
                            <img src="https://picsum.photos/id/674/400/200">
                          </div>
                          <div class="img-wrapper" data-img='two'>
                            <img src="https://picsum.photos/id/433/400/200">
                          </div>
                          <div class="img-wrapper" data-img='three'>
                            <img src="https://picsum.photos/id/901/400/200">
                          </div>
                        </div>
                      </section>
                      <div class="site-footer">
                       <div class="js-scroll-height"></div>
                       <canvas width="780" height="624" class="js-webgl" style="width: 1041px;height: 833px;opacity: 1;border: 1px solid brown;"></canvas>
                      </div>
                      
                      var $cursor = $('#cursor');
                      
                      function movecursor(e) {
                        TweenLite.to($cursor, 0.8, {
                          css: {
                            left: e.pageX,
                            top: e.pageY
                          }
                        });
                      }
                      $(window).on('mousemove', movecursor);
                      
                      let topImg = null;
                      $('.special-element').mouseenter((e) => {
                        //make all images at same level
                        $('.img-wrapper').css({ zIndex: '1' });
                      
                        //make last focused image at second highest level
                        if (topImg) topImg.css({ zIndex: '2' });
                      
                        //make current image as topImage 
                        let atr = $(e.target).attr('data-img');
                        topImg = $('.img-wrapper[data-img="' + atr + '"]');
                        //make it topmost
                        topImg.css({ zIndex: '3' });
                      });
                      :root {
                        --cursor-img-height: 30vh;
                        --cursor-img-width: 30vw;
                      }
                      
                      html,
                      body {
                        background: #0E3741;
                      }
                      
                      #wrapper {
                        display: flex;
                        flex-direction: column;
                      }
                      
                      .special-element {
                        width: 100%;
                        height: 33vh;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        font-size: 2rem;
                      }
                      
                      .special-element:nth-child(1) {
                        background: lightblue;
                      }
                      
                      .special-element:nth-child(2) {
                        background: lightcoral;
                      }
                      
                      .special-element:nth-child(3) {
                        background: lightgreen;
                      }
                      
                      #cursor {
                        position: absolute;
                        pointer-events: none;
                        margin: 0;
                        margin-top: calc(var(--cursor-img-height) * -0.5);
                        margin-left: calc(var(--cursor-img-width) * -0.5);
                        overflow: hidden;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                      }
                      
                      .img-wrapper {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        overflow: hidden;
                      }
                      
                      .img-wrapper>img {
                        position: absolute;
                        bottom: 0;
                        left: 0;
                        width: var(--cursor-img-width);
                        height: var(--cursor-img-height);
                        object-fit: fill;
                        z-index: 1;
                      }
                      
                      .special-element[data-img="one"]:hover~#cursor [data-img="one"],
                      .special-element[data-img="two"]:hover~#cursor [data-img="two"],
                      .special-element[data-img="three"]:hover~#cursor [data-img="three"] {
                        animation: slide .8s ease-in-out;
                      }
                      
                      @keyframes slide {
                        from {
                          height: 0px;
                          transform: scale(1.2);
                        }
                        to {
                          height: (--cursor-img-height);
                          transform: scale(1);
                        }
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.11.4/TweenMax.min.js"></script>
                      
                      <section id="wrapper">
                        <section class="special-element" data-img="one">food</section>
                        <section class="special-element" data-img="two">animal</section>
                        <section class="special-element" data-img="three">night</section>
                      
                        <div id="cursor">
                          <div class="img-wrapper" data-img='one'>
                            <img src="https://picsum.photos/id/674/400/200">
                          </div>
                          <div class="img-wrapper" data-img='two'>
                            <img src="https://picsum.photos/id/433/400/200">
                          </div>
                          <div class="img-wrapper" data-img='three'>
                            <img src="https://picsum.photos/id/901/400/200">
                          </div>
                        </div>
                      </section>

                      jQuery .append doesn't work with $(document).ready

                      copy iconCopydownload iconDownload
                      $("#move-filters-here").append($("#filters"));
                      
                      $("#filters").append("#move-filters-here");
                      
                      $("#move-filters-here").append($("#filters"));
                      
                      $("#filters").append("#move-filters-here");
                      
                      $(document).ready(function(){
                      
                      $("#filters").appendTo("#move-filters-here");
                      
                      $('.state-button').on('click', function() {
                      
                        let _this = $(this);
                      
                        if (!_this.hasClass('active')) {
                      
                          $('.state-button.active, .record.active').removeClass('active');
                          $('[data-state=' + _this.data('state') + ']').addClass('active');
                      
                        }
                      
                      });
                      
                      });
                        .record {
                          display: none;
                      }
                      
                      .state-button {
                          border: 2px solid #c2c2c2;
                          padding: 5px;
                          border-radius: 5px;
                          margin: 0 10px 0 10px;
                      }
                      
                      .state-button.active {
                          border-color: red;
                      }
                      
                      .record.active {
                          display: block;
                      }
                       <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                      
                      <div id="move-filters-here"></div>
                      
                      <div class="record" data-state="AK">
                          <h1 class="name">Customer 1</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: 345 Cow Town, Anchorage, <span class="state">AK</span></li>
                          </ul>
                      </div>
                      <div class="record" data-state="AR">
                          <h1 class="name">Customer 2</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Mobile, <span class="state">AR</span></li>
                          </ul>
                      </div>
                      <div class="record" data-state="CA">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Los Angeles <span class="state">CA</span></li>
                          </ul>
                      </div>
                      
                      <div class="record" data-state="AZ">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Flagstaff <span class="state">AZ</span></li>
                          </ul>
                      </div>
                      
                      <div class="record" data-state="UT">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: SLC <span class="state">UT</span></li>
                          </ul>
                      </div>
                      
                      
                      <div id="filters">
                      <button class="state-button state-button-ak" data-state="AK">Alaska</button>
                      <button class="state-button state-button-ar" data-state="AR">Arkansas</button>
                      <button class="state-button state-button-ca" data-state="CA">California</button>
                      <button class="state-button state-button-ca" data-state="AZ">Arizona</button>
                      <button class="state-button state-button-ut" data-state="UT">Utah</button>
                      </div>
                      $(document).ready(function(){
                      
                      $("#filters").appendTo("#move-filters-here");
                      
                      $('.state-button').on('click', function() {
                      
                        let _this = $(this);
                      
                        if (!_this.hasClass('active')) {
                      
                          $('.state-button.active, .record.active').removeClass('active');
                          $('[data-state=' + _this.data('state') + ']').addClass('active');
                      
                        }
                      
                      });
                      
                      });
                        .record {
                          display: none;
                      }
                      
                      .state-button {
                          border: 2px solid #c2c2c2;
                          padding: 5px;
                          border-radius: 5px;
                          margin: 0 10px 0 10px;
                      }
                      
                      .state-button.active {
                          border-color: red;
                      }
                      
                      .record.active {
                          display: block;
                      }
                       <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                      
                      <div id="move-filters-here"></div>
                      
                      <div class="record" data-state="AK">
                          <h1 class="name">Customer 1</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: 345 Cow Town, Anchorage, <span class="state">AK</span></li>
                          </ul>
                      </div>
                      <div class="record" data-state="AR">
                          <h1 class="name">Customer 2</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Mobile, <span class="state">AR</span></li>
                          </ul>
                      </div>
                      <div class="record" data-state="CA">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Los Angeles <span class="state">CA</span></li>
                          </ul>
                      </div>
                      
                      <div class="record" data-state="AZ">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Flagstaff <span class="state">AZ</span></li>
                          </ul>
                      </div>
                      
                      <div class="record" data-state="UT">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: SLC <span class="state">UT</span></li>
                          </ul>
                      </div>
                      
                      
                      <div id="filters">
                      <button class="state-button state-button-ak" data-state="AK">Alaska</button>
                      <button class="state-button state-button-ar" data-state="AR">Arkansas</button>
                      <button class="state-button state-button-ca" data-state="CA">California</button>
                      <button class="state-button state-button-ca" data-state="AZ">Arizona</button>
                      <button class="state-button state-button-ut" data-state="UT">Utah</button>
                      </div>
                      $(document).ready(function(){
                      
                      $("#filters").appendTo("#move-filters-here");
                      
                      $('.state-button').on('click', function() {
                      
                        let _this = $(this);
                      
                        if (!_this.hasClass('active')) {
                      
                          $('.state-button.active, .record.active').removeClass('active');
                          $('[data-state=' + _this.data('state') + ']').addClass('active');
                      
                        }
                      
                      });
                      
                      });
                        .record {
                          display: none;
                      }
                      
                      .state-button {
                          border: 2px solid #c2c2c2;
                          padding: 5px;
                          border-radius: 5px;
                          margin: 0 10px 0 10px;
                      }
                      
                      .state-button.active {
                          border-color: red;
                      }
                      
                      .record.active {
                          display: block;
                      }
                       <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
                      
                      <div id="move-filters-here"></div>
                      
                      <div class="record" data-state="AK">
                          <h1 class="name">Customer 1</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: 345 Cow Town, Anchorage, <span class="state">AK</span></li>
                          </ul>
                      </div>
                      <div class="record" data-state="AR">
                          <h1 class="name">Customer 2</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Mobile, <span class="state">AR</span></li>
                          </ul>
                      </div>
                      <div class="record" data-state="CA">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Los Angeles <span class="state">CA</span></li>
                          </ul>
                      </div>
                      
                      <div class="record" data-state="AZ">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: Flagstaff <span class="state">AZ</span></li>
                          </ul>
                      </div>
                      
                      <div class="record" data-state="UT">
                          <h1 class="name">Customer 3</h1>
                          <ul>
                              <li class="focus">Focus: </li>
                              <li class="course">Course: </li>
                              <li class="business">Business: </li>
                              <li class="address">Location: SLC <span class="state">UT</span></li>
                          </ul>
                      </div>
                      
                      
                      <div id="filters">
                      <button class="state-button state-button-ak" data-state="AK">Alaska</button>
                      <button class="state-button state-button-ar" data-state="AR">Arkansas</button>
                      <button class="state-button state-button-ca" data-state="CA">California</button>
                      <button class="state-button state-button-ca" data-state="AZ">Arizona</button>
                      <button class="state-button state-button-ut" data-state="UT">Utah</button>
                      </div>

                      Jquery append text data with a line break

                      copy iconCopydownload iconDownload
                      <!DOCTYPE html>
                      <html>
                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                      
                      <head>
                        <style>
                          * {
                            box-sizing: border-box;
                          }
                          
                          div {
                            padding: 10px;
                            background-color: #f6f6f6;
                            overflow: hidden;
                          }
                          
                          input[type=text],
                          textarea,
                          select {
                            font: 17px Calibri;
                            width: 100%;
                            padding: 12px;
                            border: 1px solid #ccc;
                            border-radius: 4px;
                          }
                          
                          input[type=button] {
                            font: 17px Calibri;
                            width: auto;
                            float: right;
                            cursor: pointer;
                            padding: 7px;
                          }
                        </style>
                      </head>
                      
                      <body>
                        <div>
                      
                      
                          <div>
                            <input type="text" id="txtName" placeholder="Enter your name" />
                          </div>
                          <div>
                            <input type="text" id="txtAge" placeholder="Enter your age" />
                          </div>
                          <div>
                            <input type="text" id="txtEmail" placeholder="Enter your email address" />
                          </div>
                          <div>
                            <select id="selCountry">
                              <option selected value="">-- Choose the country --</option>
                              <option value="India">India</option>
                              <option value="Japan">Japan</option>
                              <option value="USA">USA</option>
                            </select>
                          </div>
                          <div>
                            <textarea id="msg" name="msg" placeholder="Write some message ..." style="height:100px"></textarea>
                          </div>
                          <div>
                            <input type="button" id="bt" value="Write" onclick="writeFile()" />
                          </div>
                      
                        </div>
                        <div class="output-area">
                          <h4>Output</h4>
                          <div id="output" class="inner">
                          </div>
                        </div>
                        <span></span>
                      
                      </body>
                      <script>
                        let writeFile = () => {
                      
                          const name = document.getElementById('txtName');
                          const age = document.getElementById('txtAge');
                          const email = document.getElementById('txtEmail');
                          const country = document.getElementById('selCountry');
                          const msg = document.getElementById('msg');
                      
                          let data = [ 
                            `<p>Name: ${name.value}</p>`, 
                            `<p>Age: ${age.value}</p>`, 
                            `<p>Email: ${email.value}</p>`,  
                            `<p>Country: ${country.value}</p>`,  
                            `<p>Message: ${msg.value}</p>`];
                       
                         
                          $('#output').append("<br />" + "<br />");
                      
                          data.forEach(line => $('#output').append(line));
                      
                        }
                      </script>
                      
                      </html>
                      let data = [ 
                        `<p>Name: ${name.value}</p>`, 
                        `<p>Age: ${age.value}</p>`, 
                        `<p>Email: ${email.value}</p>`,  
                        `<p>Country: ${country.value}</p>`,  
                        `<p>Message: ${msg.value}</p>`];
                       
                         
                      $('#output').append("<br />" + "<br />");
                      data.forEach(line => $('#output').append(line));
                      
                      <!DOCTYPE html>
                      <html>
                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                      
                      <head>
                        <style>
                          * {
                            box-sizing: border-box;
                          }
                          
                          div {
                            padding: 10px;
                            background-color: #f6f6f6;
                            overflow: hidden;
                          }
                          
                          input[type=text],
                          textarea,
                          select {
                            font: 17px Calibri;
                            width: 100%;
                            padding: 12px;
                            border: 1px solid #ccc;
                            border-radius: 4px;
                          }
                          
                          input[type=button] {
                            font: 17px Calibri;
                            width: auto;
                            float: right;
                            cursor: pointer;
                            padding: 7px;
                          }
                        </style>
                      </head>
                      
                      <body>
                        <div>
                      
                      
                          <div>
                            <input type="text" id="txtName" placeholder="Enter your name" />
                          </div>
                          <div>
                            <input type="text" id="txtAge" placeholder="Enter your age" />
                          </div>
                          <div>
                            <input type="text" id="txtEmail" placeholder="Enter your email address" />
                          </div>
                          <div>
                            <select id="selCountry">
                              <option selected value="">-- Choose the country --</option>
                              <option value="India">India</option>
                              <option value="Japan">Japan</option>
                              <option value="USA">USA</option>
                            </select>
                          </div>
                          <div>
                            <textarea id="msg" name="msg" placeholder="Write some message ..." style="height:100px"></textarea>
                          </div>
                          <div>
                            <input type="button" id="bt" value="Write" onclick="writeFile()" />
                          </div>
                      
                        </div>
                        <div class="output-area">
                          <h4>Output</h4>
                          <div id="output" class="inner">
                          </div>
                        </div>
                        <span></span>
                      
                      </body>
                      <script>
                        let writeFile = () => {
                      
                          const name = document.getElementById('txtName');
                          const age = document.getElementById('txtAge');
                          const email = document.getElementById('txtEmail');
                          const country = document.getElementById('selCountry');
                          const msg = document.getElementById('msg');
                      
                          let data = [ 
                            `<p>Name: ${name.value}</p>`, 
                            `<p>Age: ${age.value}</p>`, 
                            `<p>Email: ${email.value}</p>`,  
                            `<p>Country: ${country.value}</p>`,  
                            `<p>Message: ${msg.value}</p>`];
                       
                         
                          $('#output').append("<br />" + "<br />");
                      
                          data.forEach(line => $('#output').append(line));
                      
                        }
                      </script>
                      
                      </html>
                      let data = [ 
                        `<p>Name: ${name.value}</p>`, 
                        `<p>Age: ${age.value}</p>`, 
                        `<p>Email: ${email.value}</p>`,  
                        `<p>Country: ${country.value}</p>`,  
                        `<p>Message: ${msg.value}</p>`];
                       
                         
                      $('#output').append("<br />" + "<br />");
                      data.forEach(line => $('#output').append(line));
                      
                      <!DOCTYPE html>
                      <html>
                      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                      
                      <head>
                        <style>
                          * {
                            box-sizing: border-box;
                          }
                          
                          div {
                            padding: 10px;
                            background-color: #f6f6f6;
                            overflow: hidden;
                          }
                          
                          input[type=text],
                          textarea,
                          select {
                            font: 17px Calibri;
                            width: 100%;
                            padding: 12px;
                            border: 1px solid #ccc;
                            border-radius: 4px;
                          }
                          
                          input[type=button] {
                            font: 17px Calibri;
                            width: auto;
                            float: right;
                            cursor: pointer;
                            padding: 7px;
                          }
                        </style>
                      </head>
                      
                      <body>
                        <div>
                      
                      
                          <div>
                            <input type="text" id="txtName" placeholder="Enter your name" />
                          </div>
                          <div>
                            <input type="text" id="txtAge" placeholder="Enter your age" />
                          </div>
                          <div>
                            <input type="text" id="txtEmail" placeholder="Enter your email address" />
                          </div>
                          <div>
                            <select id="selCountry">
                              <option selected value="">-- Choose the country --</option>
                              <option value="India">India</option>
                              <option value="Japan">Japan</option>
                              <option value="USA">USA</option>
                            </select>
                          </div>
                          <div>
                            <textarea id="msg" name="msg" placeholder="Write some message ..." style="height:100px"></textarea>
                          </div>
                          <div>
                            <input type="button" id="bt" value="Write" onclick="writeFile()" />
                          </div>
                      
                        </div>
                        <div class="output-area">
                          <h4>Output</h4>
                          <div id="output" class="inner">
                          </div>
                        </div>
                        <span></span>
                      
                      </body>
                      <script>
                        let writeFile = () => {
                      
                          const name = document.getElementById('txtName');
                          const age = document.getElementById('txtAge');
                          const email = document.getElementById('txtEmail');
                          const country = document.getElementById('selCountry');
                          const msg = document.getElementById('msg');
                      
                          let data = 'Name: ' + name.value + ' \r\n' +  
                            'Age: ' + age.value + ' \r\n' +  
                            'Email: ' + email.value + ' \r\n' +  
                            'Country: ' + country.value + ' \r\n' +  
                            'Message: ' + msg.value;
                      
                      
                          //$('#output').append("<br />" + "<br />");
                          $('#output').append(`<pre>${data}</pre>`);
                      
                      
                        }
                      </script>
                      
                      </html>
                      let data =
                        'Name: ' + name.value + '<br>' +
                        'Age: ' + age.value + '<br>' +
                        'Email: ' + email.value + '<br>' +
                        'Country: ' + country.value + '<br>' +
                        'Message: ' + msg.value;
                      
                      $('#output').append(data);
                      
                      $('#output').html(data);
                      
                      let data =
                        'Name: ' + name.value + '<br>' +
                        'Age: ' + age.value + '<br>' +
                        'Email: ' + email.value + '<br>' +
                        'Country: ' + country.value + '<br>' +
                        'Message: ' + msg.value;
                      
                      $('#output').append(data);
                      
                      $('#output').html(data);
                      
                      let data =
                        'Name: ' + name.value + '<br>' +
                        'Age: ' + age.value + '<br>' +
                        'Email: ' + email.value + '<br>' +
                        'Country: ' + country.value + '<br>' +
                        'Message: ' + msg.value;
                      
                      $('#output').append(data);
                      
                      $('#output').html(data);
                      

                      Single File ASP.NET Core 5 web app does not load static resources

                      copy iconCopydownload iconDownload
                      <Project Sdk="Microsoft.NET.Sdk.Web">
                        <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                        </PropertyGroup>
                      </Project>
                      
                      public class Startup
                          {
                              public void ConfigureServices(IServiceCollection services)
                              {
                              }
                      
                              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                              {
                                  app.UseDefaultFiles();
                                  app.UseStaticFiles();
                      
                                  app.UseRouting();
                      
                                  app.UseEndpoints(endpoints => {});
                              }
                          }
                      
                      <!DOCTYPE html>
                      <html>
                      <head>
                          <meta charset="utf-8" />
                          <title>TEST</title>
                          <link href="css/bootstrap.min.css" rel="stylesheet">
                      </head>
                      <body>
                          <script src="js/bootstrap.min.js"></script>
                      </body>
                      </html>
                      
                      <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                         <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
                      </PropertyGroup>
                      
                      <ItemGroup>
                          <Compile Remove="wwwroot\**" />
                          <Content Remove="wwwroot\**" />
                           <EmbeddedResource Include="wwwroot\**\*">
                            <Link>wwwroot\%(RecursiveDir)%(Filename)%(Extension)</Link>
                            <LogicalName>wwwroot\%(RecursiveDir)%(Filename)%(Extension) 
                            </LogicalName>
                          </EmbeddedResource>
                          <None Remove="wwwroot\**" />
                      </ItemGroup>
                      
                      var basePath = AppDomain.CurrentDomain.BaseDirectory;
                      var wwwrootPath = Path.Combine(basePath, "wwwroot");
                      
                      if (!Directory.Exists(wwwrootPath))
                      {
                          var assembly = typeof(Startup).Assembly;
                          Directory.CreateDirectory(wwwrootPath);
                      
                          var resourcePaths = assembly.GetManifestResourceNames()
                              .Where(rnn => rnn.Contains("wwwroot"))
                              .ToList();
                      
                          foreach (var resourcePath in resourcePaths)
                          {
                              var fileName = resourcePath;
                              var filePath = Path.Combine(basePath, fileName);
                              var fileInfo = new System.IO.FileInfo(filePath);
                              fileInfo.Directory.Create();
                              using var stream = File.Create(filePath);
                              using var resourceStream = assembly.GetManifestResourceStream(resourcePath);
                      
                              resourceStream.CopyTo(stream);
                          }
                      };
                      
                      app.UseStaticFiles(new StaticFileOptions
                      {
                          FileProvider = new EmbeddedFileProvider(
                              assembly: typeof(Startup).Assembly, 
                              baseNamespace: "TestApp.wwwroot"),
                      });
                      
                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapGet("/", async http => { http.Response.Redirect("/index.html"); });
                      });
                      
                      <EmbeddedResource Include="wwwroot\**\*" />
                      
                      <Project Sdk="Microsoft.NET.Sdk.Web">
                        <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                        </PropertyGroup>
                      </Project>
                      
                      public class Startup
                          {
                              public void ConfigureServices(IServiceCollection services)
                              {
                              }
                      
                              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                              {
                                  app.UseDefaultFiles();
                                  app.UseStaticFiles();
                      
                                  app.UseRouting();
                      
                                  app.UseEndpoints(endpoints => {});
                              }
                          }
                      
                      <!DOCTYPE html>
                      <html>
                      <head>
                          <meta charset="utf-8" />
                          <title>TEST</title>
                          <link href="css/bootstrap.min.css" rel="stylesheet">
                      </head>
                      <body>
                          <script src="js/bootstrap.min.js"></script>
                      </body>
                      </html>
                      
                      <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                         <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
                      </PropertyGroup>
                      
                      <ItemGroup>
                          <Compile Remove="wwwroot\**" />
                          <Content Remove="wwwroot\**" />
                           <EmbeddedResource Include="wwwroot\**\*">
                            <Link>wwwroot\%(RecursiveDir)%(Filename)%(Extension)</Link>
                            <LogicalName>wwwroot\%(RecursiveDir)%(Filename)%(Extension) 
                            </LogicalName>
                          </EmbeddedResource>
                          <None Remove="wwwroot\**" />
                      </ItemGroup>
                      
                      var basePath = AppDomain.CurrentDomain.BaseDirectory;
                      var wwwrootPath = Path.Combine(basePath, "wwwroot");
                      
                      if (!Directory.Exists(wwwrootPath))
                      {
                          var assembly = typeof(Startup).Assembly;
                          Directory.CreateDirectory(wwwrootPath);
                      
                          var resourcePaths = assembly.GetManifestResourceNames()
                              .Where(rnn => rnn.Contains("wwwroot"))
                              .ToList();
                      
                          foreach (var resourcePath in resourcePaths)
                          {
                              var fileName = resourcePath;
                              var filePath = Path.Combine(basePath, fileName);
                              var fileInfo = new System.IO.FileInfo(filePath);
                              fileInfo.Directory.Create();
                              using var stream = File.Create(filePath);
                              using var resourceStream = assembly.GetManifestResourceStream(resourcePath);
                      
                              resourceStream.CopyTo(stream);
                          }
                      };
                      
                      app.UseStaticFiles(new StaticFileOptions
                      {
                          FileProvider = new EmbeddedFileProvider(
                              assembly: typeof(Startup).Assembly, 
                              baseNamespace: "TestApp.wwwroot"),
                      });
                      
                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapGet("/", async http => { http.Response.Redirect("/index.html"); });
                      });
                      
                      <EmbeddedResource Include="wwwroot\**\*" />
                      
                      <Project Sdk="Microsoft.NET.Sdk.Web">
                        <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                        </PropertyGroup>
                      </Project>
                      
                      public class Startup
                          {
                              public void ConfigureServices(IServiceCollection services)
                              {
                              }
                      
                              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                              {
                                  app.UseDefaultFiles();
                                  app.UseStaticFiles();
                      
                                  app.UseRouting();
                      
                                  app.UseEndpoints(endpoints => {});
                              }
                          }
                      
                      <!DOCTYPE html>
                      <html>
                      <head>
                          <meta charset="utf-8" />
                          <title>TEST</title>
                          <link href="css/bootstrap.min.css" rel="stylesheet">
                      </head>
                      <body>
                          <script src="js/bootstrap.min.js"></script>
                      </body>
                      </html>
                      
                      <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                         <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
                      </PropertyGroup>
                      
                      <ItemGroup>
                          <Compile Remove="wwwroot\**" />
                          <Content Remove="wwwroot\**" />
                           <EmbeddedResource Include="wwwroot\**\*">
                            <Link>wwwroot\%(RecursiveDir)%(Filename)%(Extension)</Link>
                            <LogicalName>wwwroot\%(RecursiveDir)%(Filename)%(Extension) 
                            </LogicalName>
                          </EmbeddedResource>
                          <None Remove="wwwroot\**" />
                      </ItemGroup>
                      
                      var basePath = AppDomain.CurrentDomain.BaseDirectory;
                      var wwwrootPath = Path.Combine(basePath, "wwwroot");
                      
                      if (!Directory.Exists(wwwrootPath))
                      {
                          var assembly = typeof(Startup).Assembly;
                          Directory.CreateDirectory(wwwrootPath);
                      
                          var resourcePaths = assembly.GetManifestResourceNames()
                              .Where(rnn => rnn.Contains("wwwroot"))
                              .ToList();
                      
                          foreach (var resourcePath in resourcePaths)
                          {
                              var fileName = resourcePath;
                              var filePath = Path.Combine(basePath, fileName);
                              var fileInfo = new System.IO.FileInfo(filePath);
                              fileInfo.Directory.Create();
                              using var stream = File.Create(filePath);
                              using var resourceStream = assembly.GetManifestResourceStream(resourcePath);
                      
                              resourceStream.CopyTo(stream);
                          }
                      };
                      
                      app.UseStaticFiles(new StaticFileOptions
                      {
                          FileProvider = new EmbeddedFileProvider(
                              assembly: typeof(Startup).Assembly, 
                              baseNamespace: "TestApp.wwwroot"),
                      });
                      
                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapGet("/", async http => { http.Response.Redirect("/index.html"); });
                      });
                      
                      <EmbeddedResource Include="wwwroot\**\*" />
                      
                      <Project Sdk="Microsoft.NET.Sdk.Web">
                        <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                        </PropertyGroup>
                      </Project>
                      
                      public class Startup
                          {
                              public void ConfigureServices(IServiceCollection services)
                              {
                              }
                      
                              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                              {
                                  app.UseDefaultFiles();
                                  app.UseStaticFiles();
                      
                                  app.UseRouting();
                      
                                  app.UseEndpoints(endpoints => {});
                              }
                          }
                      
                      <!DOCTYPE html>
                      <html>
                      <head>
                          <meta charset="utf-8" />
                          <title>TEST</title>
                          <link href="css/bootstrap.min.css" rel="stylesheet">
                      </head>
                      <body>
                          <script src="js/bootstrap.min.js"></script>
                      </body>
                      </html>
                      
                      <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                         <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
                      </PropertyGroup>
                      
                      <ItemGroup>
                          <Compile Remove="wwwroot\**" />
                          <Content Remove="wwwroot\**" />
                           <EmbeddedResource Include="wwwroot\**\*">
                            <Link>wwwroot\%(RecursiveDir)%(Filename)%(Extension)</Link>
                            <LogicalName>wwwroot\%(RecursiveDir)%(Filename)%(Extension) 
                            </LogicalName>
                          </EmbeddedResource>
                          <None Remove="wwwroot\**" />
                      </ItemGroup>
                      
                      var basePath = AppDomain.CurrentDomain.BaseDirectory;
                      var wwwrootPath = Path.Combine(basePath, "wwwroot");
                      
                      if (!Directory.Exists(wwwrootPath))
                      {
                          var assembly = typeof(Startup).Assembly;
                          Directory.CreateDirectory(wwwrootPath);
                      
                          var resourcePaths = assembly.GetManifestResourceNames()
                              .Where(rnn => rnn.Contains("wwwroot"))
                              .ToList();
                      
                          foreach (var resourcePath in resourcePaths)
                          {
                              var fileName = resourcePath;
                              var filePath = Path.Combine(basePath, fileName);
                              var fileInfo = new System.IO.FileInfo(filePath);
                              fileInfo.Directory.Create();
                              using var stream = File.Create(filePath);
                              using var resourceStream = assembly.GetManifestResourceStream(resourcePath);
                      
                              resourceStream.CopyTo(stream);
                          }
                      };
                      
                      app.UseStaticFiles(new StaticFileOptions
                      {
                          FileProvider = new EmbeddedFileProvider(
                              assembly: typeof(Startup).Assembly, 
                              baseNamespace: "TestApp.wwwroot"),
                      });
                      
                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapGet("/", async http => { http.Response.Redirect("/index.html"); });
                      });
                      
                      <EmbeddedResource Include="wwwroot\**\*" />
                      
                      <Project Sdk="Microsoft.NET.Sdk.Web">
                        <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                        </PropertyGroup>
                      </Project>
                      
                      public class Startup
                          {
                              public void ConfigureServices(IServiceCollection services)
                              {
                              }
                      
                              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                              {
                                  app.UseDefaultFiles();
                                  app.UseStaticFiles();
                      
                                  app.UseRouting();
                      
                                  app.UseEndpoints(endpoints => {});
                              }
                          }
                      
                      <!DOCTYPE html>
                      <html>
                      <head>
                          <meta charset="utf-8" />
                          <title>TEST</title>
                          <link href="css/bootstrap.min.css" rel="stylesheet">
                      </head>
                      <body>
                          <script src="js/bootstrap.min.js"></script>
                      </body>
                      </html>
                      
                      <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                         <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
                      </PropertyGroup>
                      
                      <ItemGroup>
                          <Compile Remove="wwwroot\**" />
                          <Content Remove="wwwroot\**" />
                           <EmbeddedResource Include="wwwroot\**\*">
                            <Link>wwwroot\%(RecursiveDir)%(Filename)%(Extension)</Link>
                            <LogicalName>wwwroot\%(RecursiveDir)%(Filename)%(Extension) 
                            </LogicalName>
                          </EmbeddedResource>
                          <None Remove="wwwroot\**" />
                      </ItemGroup>
                      
                      var basePath = AppDomain.CurrentDomain.BaseDirectory;
                      var wwwrootPath = Path.Combine(basePath, "wwwroot");
                      
                      if (!Directory.Exists(wwwrootPath))
                      {
                          var assembly = typeof(Startup).Assembly;
                          Directory.CreateDirectory(wwwrootPath);
                      
                          var resourcePaths = assembly.GetManifestResourceNames()
                              .Where(rnn => rnn.Contains("wwwroot"))
                              .ToList();
                      
                          foreach (var resourcePath in resourcePaths)
                          {
                              var fileName = resourcePath;
                              var filePath = Path.Combine(basePath, fileName);
                              var fileInfo = new System.IO.FileInfo(filePath);
                              fileInfo.Directory.Create();
                              using var stream = File.Create(filePath);
                              using var resourceStream = assembly.GetManifestResourceStream(resourcePath);
                      
                              resourceStream.CopyTo(stream);
                          }
                      };
                      
                      app.UseStaticFiles(new StaticFileOptions
                      {
                          FileProvider = new EmbeddedFileProvider(
                              assembly: typeof(Startup).Assembly, 
                              baseNamespace: "TestApp.wwwroot"),
                      });
                      
                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapGet("/", async http => { http.Response.Redirect("/index.html"); });
                      });
                      
                      <EmbeddedResource Include="wwwroot\**\*" />
                      
                      <Project Sdk="Microsoft.NET.Sdk.Web">
                        <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                        </PropertyGroup>
                      </Project>
                      
                      public class Startup
                          {
                              public void ConfigureServices(IServiceCollection services)
                              {
                              }
                      
                              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                              {
                                  app.UseDefaultFiles();
                                  app.UseStaticFiles();
                      
                                  app.UseRouting();
                      
                                  app.UseEndpoints(endpoints => {});
                              }
                          }
                      
                      <!DOCTYPE html>
                      <html>
                      <head>
                          <meta charset="utf-8" />
                          <title>TEST</title>
                          <link href="css/bootstrap.min.css" rel="stylesheet">
                      </head>
                      <body>
                          <script src="js/bootstrap.min.js"></script>
                      </body>
                      </html>
                      
                      <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                         <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
                      </PropertyGroup>
                      
                      <ItemGroup>
                          <Compile Remove="wwwroot\**" />
                          <Content Remove="wwwroot\**" />
                           <EmbeddedResource Include="wwwroot\**\*">
                            <Link>wwwroot\%(RecursiveDir)%(Filename)%(Extension)</Link>
                            <LogicalName>wwwroot\%(RecursiveDir)%(Filename)%(Extension) 
                            </LogicalName>
                          </EmbeddedResource>
                          <None Remove="wwwroot\**" />
                      </ItemGroup>
                      
                      var basePath = AppDomain.CurrentDomain.BaseDirectory;
                      var wwwrootPath = Path.Combine(basePath, "wwwroot");
                      
                      if (!Directory.Exists(wwwrootPath))
                      {
                          var assembly = typeof(Startup).Assembly;
                          Directory.CreateDirectory(wwwrootPath);
                      
                          var resourcePaths = assembly.GetManifestResourceNames()
                              .Where(rnn => rnn.Contains("wwwroot"))
                              .ToList();
                      
                          foreach (var resourcePath in resourcePaths)
                          {
                              var fileName = resourcePath;
                              var filePath = Path.Combine(basePath, fileName);
                              var fileInfo = new System.IO.FileInfo(filePath);
                              fileInfo.Directory.Create();
                              using var stream = File.Create(filePath);
                              using var resourceStream = assembly.GetManifestResourceStream(resourcePath);
                      
                              resourceStream.CopyTo(stream);
                          }
                      };
                      
                      app.UseStaticFiles(new StaticFileOptions
                      {
                          FileProvider = new EmbeddedFileProvider(
                              assembly: typeof(Startup).Assembly, 
                              baseNamespace: "TestApp.wwwroot"),
                      });
                      
                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapGet("/", async http => { http.Response.Redirect("/index.html"); });
                      });
                      
                      <EmbeddedResource Include="wwwroot\**\*" />
                      
                      <Project Sdk="Microsoft.NET.Sdk.Web">
                        <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                        </PropertyGroup>
                      </Project>
                      
                      public class Startup
                          {
                              public void ConfigureServices(IServiceCollection services)
                              {
                              }
                      
                              public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
                              {
                                  app.UseDefaultFiles();
                                  app.UseStaticFiles();
                      
                                  app.UseRouting();
                      
                                  app.UseEndpoints(endpoints => {});
                              }
                          }
                      
                      <!DOCTYPE html>
                      <html>
                      <head>
                          <meta charset="utf-8" />
                          <title>TEST</title>
                          <link href="css/bootstrap.min.css" rel="stylesheet">
                      </head>
                      <body>
                          <script src="js/bootstrap.min.js"></script>
                      </body>
                      </html>
                      
                      <PropertyGroup>
                          <TargetFramework>net5.0</TargetFramework>
                         <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
                      </PropertyGroup>
                      
                      <ItemGroup>
                          <Compile Remove="wwwroot\**" />
                          <Content Remove="wwwroot\**" />
                           <EmbeddedResource Include="wwwroot\**\*">
                            <Link>wwwroot\%(RecursiveDir)%(Filename)%(Extension)</Link>
                            <LogicalName>wwwroot\%(RecursiveDir)%(Filename)%(Extension) 
                            </LogicalName>
                          </EmbeddedResource>
                          <None Remove="wwwroot\**" />
                      </ItemGroup>
                      
                      var basePath = AppDomain.CurrentDomain.BaseDirectory;
                      var wwwrootPath = Path.Combine(basePath, "wwwroot");
                      
                      if (!Directory.Exists(wwwrootPath))
                      {
                          var assembly = typeof(Startup).Assembly;
                          Directory.CreateDirectory(wwwrootPath);
                      
                          var resourcePaths = assembly.GetManifestResourceNames()
                              .Where(rnn => rnn.Contains("wwwroot"))
                              .ToList();
                      
                          foreach (var resourcePath in resourcePaths)
                          {
                              var fileName = resourcePath;
                              var filePath = Path.Combine(basePath, fileName);
                              var fileInfo = new System.IO.FileInfo(filePath);
                              fileInfo.Directory.Create();
                              using var stream = File.Create(filePath);
                              using var resourceStream = assembly.GetManifestResourceStream(resourcePath);
                      
                              resourceStream.CopyTo(stream);
                          }
                      };
                      
                      app.UseStaticFiles(new StaticFileOptions
                      {
                          FileProvider = new EmbeddedFileProvider(
                              assembly: typeof(Startup).Assembly, 
                              baseNamespace: "TestApp.wwwroot"),
                      });
                      
                      app.UseEndpoints(endpoints =>
                      {
                          endpoints.MapGet("/", async http => { http.Response.Redirect("/index.html"); });
                      });
                      
                      <EmbeddedResource Include="wwwroot\**\*" />
                      
                      <ItemGroup>
                          <Content Update="wwwroot\**" ExcludeFromSingleFile="false">
                              <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
                          </Content>
                      </ItemGroup>
                      
                      app.UseStaticFiles(new StaticFileOptions()
                      {
                          FileProvider = new PhysicalFileProvider( Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot")),
                          RequestPath = new PathString("/wwwroot")  // OR use "/" to map to base URI
                      });
                      

                      How to add multiple slider support to a simple jquery slider?

                      copy iconCopydownload iconDownload
                      <!DOCTYPE html>
                      <html>
                      <head>
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
                      <style>
                      body {
                        font-family: system-ui;
                        background: #f06d06;
                        color: white;
                        text-align: center;
                      }
                      
                      .slider-holder {
                         width: 50%;
                         height: 300px;
                         float: left;
                         position: relative;
                         margin: 0 auto;
                         overflow: hidden;
                         border-radius: 5px;
                         background-color: #000;
                      }
                      
                      .slider-holder  ul, li {
                         padding:0;
                         margin:0;
                         list-style:none;
                      }
                      
                      .slider-holder .content {
                        position: absolute;
                        bottom: 0;
                        background: rgb(0, 0, 0);
                        background: rgba(0, 0, 0, 0.5);
                        color: #f1f1f1;
                        width: 100%;
                        padding: 20px;
                      }
                      
                      .carousel-prev {
                        position: absolute;
                        top: 50%;
                        left: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      .carousel-next {
                        position: absolute;
                        top: 50%;
                        right: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      
                      .carousel-indicators {
                        position: absolute;
                        right: 0;
                        top: 0;
                        left: 0;
                        z-index: 2;
                        display: flex;
                        justify-content: flex-start;
                        padding: 0;
                        margin-right: 1%;
                        margin-bottom: 10px;
                        margin-left: 1%;
                        list-style: none;
                      }
                      .carousel-indicators li {
                        box-sizing: content-box;
                        flex: 0 1 auto;
                        width: 30px;
                        height: 30px;
                        padding: 0;
                        margin-right: 3px;
                        margin-left: 3px;
                        color: #fff;
                        font-size: 14px;
                        text-align: center;
                        line-height: 30px;
                        text-indent: 0;
                        cursor: pointer;
                        background-color: rgba(15, 15, 20, 0.7);
                        background-clip: padding-box;
                        border: 0;
                        border-top: 10px solid transparent;
                        border-bottom: 10px solid transparent;
                        opacity: 0.9;
                        transition: opacity 0.6s ease;
                      }
                      
                      .carousel-indicators  li:hover, .carousel-indicators li.active {
                        background-color: red;
                      }
                      
                      .carousel-indicators1  {
                        position: absolute;
                        right: 0;
                        top: 0;
                        left: 0;
                        z-index: 2;
                        display: flex;
                        justify-content: flex-start;
                        padding: 0;
                        margin-right: 1%;
                        margin-bottom: 10px;
                        margin-left: 1%;
                        list-style: none;
                      }
                      .carousel-indicators1  li {
                        box-sizing: content-box;
                        flex: 0 1 auto;
                        width: 30px;
                        height: 30px;
                        padding: 0;
                        margin-right: 3px;
                        margin-left: 3px;
                        color: #fff;
                        font-size: 14px;
                        text-align: center;
                        line-height: 30px;
                        text-indent: 0;
                        cursor: pointer;
                        background-color: rgba(15, 15, 20, 0.7);
                        background-clip: padding-box;
                        border: 0;
                        border-top: 10px solid transparent;
                        border-bottom: 10px solid transparent;
                        opacity: 0.9;
                        transition: opacity 0.6s ease;
                      }
                      
                      .carousel-indicators1  li:hover, .carousel-indicators1 li.active {
                        background-color: red;
                      }
                      </style>
                      </head>
                      <body>
                        <div class="slider-holder" id="slider">
                               <ul class="image-slide" id="image" >
                                   <li>
                                     <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                               </ul>
                               <ul class="carousel-indicators" id="buton">
                                 <li><span>1</span></li>
                                 <li><span>2</span></li>
                                 <li><span>3</span></li>
                                 <li><span>4</span></li>
                                 <li><span>5</span></li>
                               </ul>
                            </div>
                      
                      
                      
                      <h1> Second slider </h1>
                            <div class="slider-holder" id="slider1" style="width: 40%;float:right;">
                               <ul class="image-slide" id="image1" >
                                   <li>
                                     <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                                   <li>
                                     <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                                       <div class="content">
                                         <h1>Heading</h1>
                                       </div>
                                     </div>
                                   </li>
                               </ul>
                               <ul class="carousel-indicators1" id="buton">
                                 <li><span>1</span></li>
                                 <li><span>2</span></li>
                                 <li><span>3</span></li>
                                 <li><span>4</span></li>
                                 <li><span>5</span></li>
                               </ul>
                            </div>
                      <script>
                       $(function(){    
                      var Slider = 0;
                      $.Slider = function(total){
                         $(".carousel-indicators li").removeClass("active");
                         $("#image li").hide();
                         if (Slider < total -1){
                             Slider++;
                               $(".carousel-indicators li:eq("+Slider+")").addClass("active");
                               $("#image li:eq("+Slider+")").fadeIn("slow");                                    
                             }else {
                               $(".carousel-indicators li:first").addClass("active");
                               $("#image li:first").fadeIn("slow");    
                               Slider = 0;    
                             }
                         }
                      
                         var totalLi = $(".carousel-indicators li").length;
                         var interval = setInterval('$.Slider('+totalLi+')',5000);
                         $("#slider").hover(function(){
                            clearInterval(interval);
                         },function(){
                            interval = setInterval('$.Slider('+totalLi+')',5000);    
                         });
                      
                         $(".carousel-indicators li:first").addClass("active");
                         $("#image li").hide();
                         $("#image li:first").show();
                         $(".carousel-indicators li").hover(function(){
                            var indicators = $(this).index();
                            $(".carousel-indicators li").removeClass("active");
                            $(this).addClass("active");
                            $("#image li").hide();
                            $("#image li:eq("+indicators+")").fadeIn("slow");                                   
                            Slider = indicators;
                            return true;   
                         });  
                        
                        
                        var Slider1 = 0;
                      $.Slider = function(total1){
                         $(".carousel-indicators1 li").removeClass("active");
                         $("#image1 li").hide();
                         if (Slider1 < total1 -1){
                             Slider1++;
                               $(".carousel-indicators1 li:eq("+Slider1+")").addClass("active");
                               $("#image1 li:eq("+Slider1+")").fadeIn("slow");                                    
                             }else {
                               $(".carousel-indicators1 li:first").addClass("active");
                               $("#image1 li:first").fadeIn("slow");    
                               Slider1 = 0;    
                             }
                         }
                      
                         var totalLi = $(".carousel-indicators1 li").length;
                         var interval = setInterval('$.Slider('+totalLi+')',5000);
                         $("#slider1").hover(function(){
                            clearInterval(interval);
                         },function(){
                            interval = setInterval('$.Slider('+totalLi+')',5000);    
                         });
                      
                         $(".carousel-indicators1 li:first").addClass("active");
                         $("#image1 li").hide();
                         $("#image1 li:first").show();
                         $(".carousel-indicators1 li").hover(function(){
                            var indicators1 = $(this).index();
                            $(".carousel-indicators1 li").removeClass("active");
                            $(this).addClass("active");
                            $("#image1 li").hide();
                            $("#image1 li:eq("+indicators1+")").fadeIn("slow");                                   
                            Slider1 = indicators1;
                            return true;   
                         });  
                        
                      });
                      </script>
                      </body>
                      </html>
                         <html>
                         <head>
                         <title>Your slider in a simple web page</title>
                      
                         <style>
                         body { background-color: #fff; color: #000; padding: 0; margin: 0; }
                         .container { width: 900px; margin: auto; padding-top: 1em; }
                         .container .ism-slider { margin-left: auto; margin-right: auto; }
                         </style>
                      
                         <link rel="stylesheet" href="ism/css/my-slider.css"/>
                         <script src="ism/js/ism-2.2.min.js"></script>
                      
                         </head>
                         <body>
                         <div class='container'>
                      
                         <div class="ism-slider" id="my-slider">
                         <ol>
                         <li>
                        <img src="ism/image/slides/flower-729514_1280.jpg">
                        <div class="ism-caption ism-caption-0">My slide caption text</div>
                        </li>
                        <li>
                        <img src="ism/image/slides/beautiful-701678_1280.jpg">
                        <div class="ism-caption ism-caption-0">My slide caption text</div>
                        </li>
                        <li>
                        <img src="ism/image/slides/summer-192179_1280.jpg">
                        <div class="ism-caption ism-caption-0">My slide caption text</div>
                        </li>
                        </ol>
                        </div>
                        <p class="ism-badge" id="my-slider-ism-badge"><a class="ism-link"
                        href="http://imageslidermaker.com" rel="nofollow">generated with ISM</a></p>
                      
                        <section><h1>Your slider in a simple web page</h1>
                      
                      
                        <p>This is a working example of your slider.</p>
                      
                        <p>To get your slider working in your web page add <em>my-slider.css</em>,    
                        <em>ism-2.2.min.js</em> and the slide images to your project directory and paste 
                        the markup into your HTML.</p>
                        <p>Please see README.txt for more detailed instructions.</p>
                      
                        <p>* If your slider is not displayed correctly, please first make sure you have 
                        fully extracted the contents of the zip file.</p>
                      
                        </section></div>
                        </body>
                        </html>
                      
                      $(function() {
                        $.Slider = function(total) {
                        //loop through all slider
                          $(".slider-holder").each(function() {
                            var index = $(this).find(".carousel-indicators .active").index() + 1; //get index of active ..class + 1 
                            $(this).find(".carousel-indicators li").removeClass("active");
                            $(this).find(".image-slide li").hide();
                            if (index < total) {
                              $(this).find(".carousel-indicators li:eq(" + index + ") ").addClass("active");
                              $(this).find(".image-slide li:eq(" + index + ")").fadeIn("slow");
                            } else {
                              $(this).find(".carousel-indicators  li:eq(0)").addClass("active");
                              $(this).find(".image-slide li:eq(0)").fadeIn("slow");
                            }
                          })
                        }
                      
                        var totalLi = $(".slider-holder:eq(0) .carousel-indicators li").length;
                        var interval = setInterval('$.Slider(' + totalLi + ')', 5000);
                        $(".slider-holder").hover(function() {
                          clearInterval(interval);
                        }, function() {
                          interval = setInterval('$.Slider(' + totalLi + ')', 5000);
                        });
                      
                        $(".carousel-indicators li").hover(function() {
                          var indicators = $(this).index();
                          var selector = $(this); //current li hover...
                          selector.closest(".carousel-indicators").find("li").removeClass("active"); // to add clas..
                          selector.addClass("active");
                          selector.closest(".slider-holder").find(" .image-slide > li").hide();
                          selector.closest(".slider-holder").find(".image-slide > li:eq(" + indicators + ")").fadeIn("slow");
                          return true;
                        });
                      });
                      body {
                        font-family: system-ui;
                        background: #f06d06;
                        color: white;
                        text-align: center;
                      }
                      
                      .slider-holder {
                        width: 50%;
                        height: 300px;
                        float: left;
                        position: relative;
                        margin: 0 auto;
                        overflow: hidden;
                        border-radius: 5px;
                        background-color: #000;
                      }
                      
                      .slider-holder ul,
                      li {
                        padding: 0;
                        margin: 0;
                        list-style: none;
                      }
                      
                      .slider-holder .content {
                        position: absolute;
                        bottom: 0;
                        background: rgb(0, 0, 0);
                        background: rgba(0, 0, 0, 0.5);
                        color: #f1f1f1;
                        width: 100%;
                        padding: 20px;
                      }
                      
                      .carousel-prev {
                        position: absolute;
                        top: 50%;
                        left: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      .carousel-next {
                        position: absolute;
                        top: 50%;
                        right: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      .carousel-indicators {
                        position: absolute;
                        right: 0;
                        top: 0;
                        left: 0;
                        z-index: 2;
                        display: flex;
                        justify-content: flex-start;
                        padding: 0;
                        margin-right: 1%;
                        margin-bottom: 10px;
                        margin-left: 1%;
                        list-style: none;
                      }
                      
                      .carousel-indicators li {
                        box-sizing: content-box;
                        flex: 0 1 auto;
                        width: 30px;
                        height: 30px;
                        padding: 0;
                        margin-right: 3px;
                        margin-left: 3px;
                        color: #fff;
                        font-size: 14px;
                        text-align: center;
                        line-height: 30px;
                        text-indent: 0;
                        cursor: pointer;
                        background-color: rgba(15, 15, 20, 0.7);
                        background-clip: padding-box;
                        border: 0;
                        border-top: 10px solid transparent;
                        border-bottom: 10px solid transparent;
                        opacity: 0.9;
                        transition: opacity 0.6s ease;
                      }
                      
                      .carousel-indicators li:hover,
                      .carousel-indicators li.active {
                        background-color: red;
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
                      <div class="slider-holder" id="slider">
                        <ul class="image-slide" id="image">
                          <li>
                            <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                        </ul>
                        <ul class="carousel-indicators" id="buton">
                          <li class="active"><span>1</span></li>
                          <li><span>2</span></li>
                          <li><span>3</span></li>
                          <li><span>4</span></li>
                          <li><span>5</span></li>
                        </ul>
                      </div>
                      
                      
                      
                      <h1> Second slider </h1>
                      <div class="slider-holder" style="width: 40%;float:right;">
                        <ul class="image-slide">
                          <li>
                            <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                        </ul>
                        <ul class="carousel-indicators">
                          <li class="active"><span>1</span></li>
                          <li><span>2</span></li>
                          <li><span>3</span></li>
                          <li><span>4</span></li>
                          <li><span>5</span></li>
                        </ul>
                      </div>
                      $(function() {
                        $.Slider = function(total) {
                        //loop through all slider
                          $(".slider-holder").each(function() {
                            var index = $(this).find(".carousel-indicators .active").index() + 1; //get index of active ..class + 1 
                            $(this).find(".carousel-indicators li").removeClass("active");
                            $(this).find(".image-slide li").hide();
                            if (index < total) {
                              $(this).find(".carousel-indicators li:eq(" + index + ") ").addClass("active");
                              $(this).find(".image-slide li:eq(" + index + ")").fadeIn("slow");
                            } else {
                              $(this).find(".carousel-indicators  li:eq(0)").addClass("active");
                              $(this).find(".image-slide li:eq(0)").fadeIn("slow");
                            }
                          })
                        }
                      
                        var totalLi = $(".slider-holder:eq(0) .carousel-indicators li").length;
                        var interval = setInterval('$.Slider(' + totalLi + ')', 5000);
                        $(".slider-holder").hover(function() {
                          clearInterval(interval);
                        }, function() {
                          interval = setInterval('$.Slider(' + totalLi + ')', 5000);
                        });
                      
                        $(".carousel-indicators li").hover(function() {
                          var indicators = $(this).index();
                          var selector = $(this); //current li hover...
                          selector.closest(".carousel-indicators").find("li").removeClass("active"); // to add clas..
                          selector.addClass("active");
                          selector.closest(".slider-holder").find(" .image-slide > li").hide();
                          selector.closest(".slider-holder").find(".image-slide > li:eq(" + indicators + ")").fadeIn("slow");
                          return true;
                        });
                      });
                      body {
                        font-family: system-ui;
                        background: #f06d06;
                        color: white;
                        text-align: center;
                      }
                      
                      .slider-holder {
                        width: 50%;
                        height: 300px;
                        float: left;
                        position: relative;
                        margin: 0 auto;
                        overflow: hidden;
                        border-radius: 5px;
                        background-color: #000;
                      }
                      
                      .slider-holder ul,
                      li {
                        padding: 0;
                        margin: 0;
                        list-style: none;
                      }
                      
                      .slider-holder .content {
                        position: absolute;
                        bottom: 0;
                        background: rgb(0, 0, 0);
                        background: rgba(0, 0, 0, 0.5);
                        color: #f1f1f1;
                        width: 100%;
                        padding: 20px;
                      }
                      
                      .carousel-prev {
                        position: absolute;
                        top: 50%;
                        left: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      .carousel-next {
                        position: absolute;
                        top: 50%;
                        right: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      .carousel-indicators {
                        position: absolute;
                        right: 0;
                        top: 0;
                        left: 0;
                        z-index: 2;
                        display: flex;
                        justify-content: flex-start;
                        padding: 0;
                        margin-right: 1%;
                        margin-bottom: 10px;
                        margin-left: 1%;
                        list-style: none;
                      }
                      
                      .carousel-indicators li {
                        box-sizing: content-box;
                        flex: 0 1 auto;
                        width: 30px;
                        height: 30px;
                        padding: 0;
                        margin-right: 3px;
                        margin-left: 3px;
                        color: #fff;
                        font-size: 14px;
                        text-align: center;
                        line-height: 30px;
                        text-indent: 0;
                        cursor: pointer;
                        background-color: rgba(15, 15, 20, 0.7);
                        background-clip: padding-box;
                        border: 0;
                        border-top: 10px solid transparent;
                        border-bottom: 10px solid transparent;
                        opacity: 0.9;
                        transition: opacity 0.6s ease;
                      }
                      
                      .carousel-indicators li:hover,
                      .carousel-indicators li.active {
                        background-color: red;
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
                      <div class="slider-holder" id="slider">
                        <ul class="image-slide" id="image">
                          <li>
                            <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                        </ul>
                        <ul class="carousel-indicators" id="buton">
                          <li class="active"><span>1</span></li>
                          <li><span>2</span></li>
                          <li><span>3</span></li>
                          <li><span>4</span></li>
                          <li><span>5</span></li>
                        </ul>
                      </div>
                      
                      
                      
                      <h1> Second slider </h1>
                      <div class="slider-holder" style="width: 40%;float:right;">
                        <ul class="image-slide">
                          <li>
                            <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                        </ul>
                        <ul class="carousel-indicators">
                          <li class="active"><span>1</span></li>
                          <li><span>2</span></li>
                          <li><span>3</span></li>
                          <li><span>4</span></li>
                          <li><span>5</span></li>
                        </ul>
                      </div>
                      $(function() {
                        $.Slider = function(total) {
                        //loop through all slider
                          $(".slider-holder").each(function() {
                            var index = $(this).find(".carousel-indicators .active").index() + 1; //get index of active ..class + 1 
                            $(this).find(".carousel-indicators li").removeClass("active");
                            $(this).find(".image-slide li").hide();
                            if (index < total) {
                              $(this).find(".carousel-indicators li:eq(" + index + ") ").addClass("active");
                              $(this).find(".image-slide li:eq(" + index + ")").fadeIn("slow");
                            } else {
                              $(this).find(".carousel-indicators  li:eq(0)").addClass("active");
                              $(this).find(".image-slide li:eq(0)").fadeIn("slow");
                            }
                          })
                        }
                      
                        var totalLi = $(".slider-holder:eq(0) .carousel-indicators li").length;
                        var interval = setInterval('$.Slider(' + totalLi + ')', 5000);
                        $(".slider-holder").hover(function() {
                          clearInterval(interval);
                        }, function() {
                          interval = setInterval('$.Slider(' + totalLi + ')', 5000);
                        });
                      
                        $(".carousel-indicators li").hover(function() {
                          var indicators = $(this).index();
                          var selector = $(this); //current li hover...
                          selector.closest(".carousel-indicators").find("li").removeClass("active"); // to add clas..
                          selector.addClass("active");
                          selector.closest(".slider-holder").find(" .image-slide > li").hide();
                          selector.closest(".slider-holder").find(".image-slide > li:eq(" + indicators + ")").fadeIn("slow");
                          return true;
                        });
                      });
                      body {
                        font-family: system-ui;
                        background: #f06d06;
                        color: white;
                        text-align: center;
                      }
                      
                      .slider-holder {
                        width: 50%;
                        height: 300px;
                        float: left;
                        position: relative;
                        margin: 0 auto;
                        overflow: hidden;
                        border-radius: 5px;
                        background-color: #000;
                      }
                      
                      .slider-holder ul,
                      li {
                        padding: 0;
                        margin: 0;
                        list-style: none;
                      }
                      
                      .slider-holder .content {
                        position: absolute;
                        bottom: 0;
                        background: rgb(0, 0, 0);
                        background: rgba(0, 0, 0, 0.5);
                        color: #f1f1f1;
                        width: 100%;
                        padding: 20px;
                      }
                      
                      .carousel-prev {
                        position: absolute;
                        top: 50%;
                        left: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      .carousel-next {
                        position: absolute;
                        top: 50%;
                        right: 30px;
                        margin-top: -15px;
                        z-index: 10;
                        font-size: 30px;
                        color: rgba(255, 255, 255, 0.8);
                        cursor: pointer;
                      }
                      
                      .carousel-indicators {
                        position: absolute;
                        right: 0;
                        top: 0;
                        left: 0;
                        z-index: 2;
                        display: flex;
                        justify-content: flex-start;
                        padding: 0;
                        margin-right: 1%;
                        margin-bottom: 10px;
                        margin-left: 1%;
                        list-style: none;
                      }
                      
                      .carousel-indicators li {
                        box-sizing: content-box;
                        flex: 0 1 auto;
                        width: 30px;
                        height: 30px;
                        padding: 0;
                        margin-right: 3px;
                        margin-left: 3px;
                        color: #fff;
                        font-size: 14px;
                        text-align: center;
                        line-height: 30px;
                        text-indent: 0;
                        cursor: pointer;
                        background-color: rgba(15, 15, 20, 0.7);
                        background-clip: padding-box;
                        border: 0;
                        border-top: 10px solid transparent;
                        border-bottom: 10px solid transparent;
                        opacity: 0.9;
                        transition: opacity 0.6s ease;
                      }
                      
                      .carousel-indicators li:hover,
                      .carousel-indicators li.active {
                        background-color: red;
                      }
                      <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
                      <div class="slider-holder" id="slider">
                        <ul class="image-slide" id="image">
                          <li>
                            <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                        </ul>
                        <ul class="carousel-indicators" id="buton">
                          <li class="active"><span>1</span></li>
                          <li><span>2</span></li>
                          <li><span>3</span></li>
                          <li><span>4</span></li>
                          <li><span>5</span></li>
                        </ul>
                      </div>
                      
                      
                      
                      <h1> Second slider </h1>
                      <div class="slider-holder" style="width: 40%;float:right;">
                        <ul class="image-slide">
                          <li>
                            <div class="img-fluid" style="background-image:url(https://cdn.pixabay.com/photo/2018/03/13/22/53/puzzle-3223941__480.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/13/57/puzzle-1721619__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2016/10/07/14/13/puzzle-1721635__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2020/03/18/20/01/frankfurt-4945405__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                          <li>
                            <div style="background-image:url(https://cdn.pixabay.com/photo/2014/04/05/11/19/internet-315132__340.jpg); background-position: center; background-size: 100% 100%;height: 300px;">
                              <div class="content">
                                <h1>Heading</h1>
                              </div>
                            </div>
                          </li>
                        </ul>
                        <ul class="carousel-indicators">
                          <li class="active"><span>1</span></li>
                          <li><span>2</span></li>
                          <li><span>3</span></li>
                          <li><span>4</span></li>
                          <li><span>5</span></li>
                        </ul>
                      </div>

                      Bootstrap 5 dropdown not working on angular 12

                      copy iconCopydownload iconDownload
                      npm install @popperjs/core
                      
                      "scripts": [
                        "./node_modules/@popperjs/core/dist/umd/popper.min.js",
                        "./node_modules/bootstrap/dist/js/bootstrap.min.js"
                      ]
                      
                      "scripts": [
                        "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
                      ]
                      
                      npm install @ng-bootstrap/ng-bootstrap
                      
                      import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
                      
                      @NgModule({
                        imports: [.., NgbModule]
                      })
                      
                      <div ngbDropdown class="dropdown">
                        <button ngbDropdownToggle class="btn btn-secondary" type="button" id="dropdownMenuButton1" aria-expanded="false">
                      Dropdown button
                      </button>
                        <ul ngbDropdownMenu aria-labelledby="dropdownMenuButton1">
                          <li><a ngbDropdownItem href="#">Action</a></li>
                          <li><a ngbDropdownItem href="#">Another action</a></li>
                          <li><a ngbDropdownItem href="#">Something else here</a></li>
                        </ul>
                      </div>
                      
                      npm install @popperjs/core
                      
                      "scripts": [
                        "./node_modules/@popperjs/core/dist/umd/popper.min.js",
                        "./node_modules/bootstrap/dist/js/bootstrap.min.js"
                      ]
                      
                      "scripts": [
                        "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
                      ]
                      
                      npm install @ng-bootstrap/ng-bootstrap
                      
                      import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
                      
                      @NgModule({
                        imports: [.., NgbModule]
                      })
                      
                      <div ngbDropdown class="dropdown">
                        <button ngbDropdownToggle class="btn btn-secondary" type="button" id="dropdownMenuButton1" aria-expanded="false">
                      Dropdown button
                      </button>
                        <ul ngbDropdownMenu aria-labelledby="dropdownMenuButton1">
                          <li><a ngbDropdownItem href="#">Action</a></li>
                          <li><a ngbDropdownItem href="#">Another action</a></li>
                          <li><a ngbDropdownItem href="#">Something else here</a></li>
                        </ul>
                      </div>
                      
                      npm install @popperjs/core
                      
                      "scripts": [
                        "./node_modules/@popperjs/core/dist/umd/popper.min.js",
                        "./node_modules/bootstrap/dist/js/bootstrap.min.js"
                      ]
                      
                      "scripts": [
                        "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
                      ]
                      
                      npm install @ng-bootstrap/ng-bootstrap
                      
                      import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
                      
                      @NgModule({
                        imports: [.., NgbModule]
                      })
                      
                      <div ngbDropdown class="dropdown">
                        <button ngbDropdownToggle class="btn btn-secondary" type="button" id="dropdownMenuButton1" aria-expanded="false">
                      Dropdown button
                      </button>
                        <ul ngbDropdownMenu aria-labelledby="dropdownMenuButton1">
                          <li><a ngbDropdownItem href="#">Action</a></li>
                          <li><a ngbDropdownItem href="#">Another action</a></li>
                          <li><a ngbDropdownItem href="#">Something else here</a></li>
                        </ul>
                      </div>
                      
                      npm install @popperjs/core
                      
                      "scripts": [
                        "./node_modules/@popperjs/core/dist/umd/popper.min.js",
                        "./node_modules/bootstrap/dist/js/bootstrap.min.js"
                      ]
                      
                      "scripts": [
                        "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
                      ]
                      
                      npm install @ng-bootstrap/ng-bootstrap
                      
                      import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
                      
                      @NgModule({
                        imports: [.., NgbModule]
                      })
                      
                      <div ngbDropdown class="dropdown">
                        <button ngbDropdownToggle class="btn btn-secondary" type="button" id="dropdownMenuButton1" aria-expanded="false">
                      Dropdown button
                      </button>
                        <ul ngbDropdownMenu aria-labelledby="dropdownMenuButton1">
                          <li><a ngbDropdownItem href="#">Action</a></li>
                          <li><a ngbDropdownItem href="#">Another action</a></li>
                          <li><a ngbDropdownItem href="#">Something else here</a></li>
                        </ul>
                      </div>
                      
                      npm install @popperjs/core
                      
                      "scripts": [
                        "./node_modules/@popperjs/core/dist/umd/popper.min.js",
                        "./node_modules/bootstrap/dist/js/bootstrap.min.js"
                      ]
                      
                      "scripts": [
                        "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
                      ]
                      
                      npm install @ng-bootstrap/ng-bootstrap
                      
                      import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
                      
                      @NgModule({
                        imports: [.., NgbModule]
                      })
                      
                      <div ngbDropdown class="dropdown">
                        <button ngbDropdownToggle class="btn btn-secondary" type="button" id="dropdownMenuButton1" aria-expanded="false">
                      Dropdown button
                      </button>
                        <ul ngbDropdownMenu aria-labelledby="dropdownMenuButton1">
                          <li><a ngbDropdownItem href="#">Action</a></li>
                          <li><a ngbDropdownItem href="#">Another action</a></li>
                          <li><a ngbDropdownItem href="#">Something else here</a></li>
                        </ul>
                      </div>
                      
                      npm install @popperjs/core
                      
                      "scripts": [
                        "./node_modules/@popperjs/core/dist/umd/popper.min.js",
                        "./node_modules/bootstrap/dist/js/bootstrap.min.js"
                      ]
                      
                      "scripts": [
                        "./node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
                      ]
                      
                      npm install @ng-bootstrap/ng-bootstrap
                      
                      import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
                      
                      @NgModule({
                        imports: [.., NgbModule]
                      })
                      
                      <div ngbDropdown class="dropdown">
                        <button ngbDropdownToggle class="btn btn-secondary" type="button" id="dropdownMenuButton1" aria-expanded="false">
                      Dropdown button
                      </button>
                        <ul ngbDropdownMenu aria-labelledby="dropdownMenuButton1">
                          <li><a ngbDropdownItem href="#">Action</a></li>
                          <li><a ngbDropdownItem href="#">Another action</a></li>
                          <li><a ngbDropdownItem href="#">Something else here</a></li>
                        </ul>
                      </div>
                      

                      Rewrite jQuery easing easeInExpo function into plain javascript &amp; css

                      copy iconCopydownload iconDownload
                      transition: all 500ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      
                      let expandable = document.getElementById('expandable');
                      let expandButton = document.getElementById('expand-button');
                      
                      expandButton.addEventListener('click', () => {
                        expandable.classList.toggle('expanded');
                      });
                      #expandable {
                        background: red;
                        transition: all 550ms cubic-bezier(.02, .01, .47, 1);
                        height: 0px;
                        width: 100px;
                        transition-delay: 0ms;
                      }
                      
                      #expandable.expanded {
                        height: 100px;
                        transition-delay: 35ms;
                        transition: all 300ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      }
                      <div id="expandable"></div>
                      <br />
                      <button id="expand-button">Toggle expand</button>
                      transition: all 500ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      
                      let expandable = document.getElementById('expandable');
                      let expandButton = document.getElementById('expand-button');
                      
                      expandButton.addEventListener('click', () => {
                        expandable.classList.toggle('expanded');
                      });
                      #expandable {
                        background: red;
                        transition: all 550ms cubic-bezier(.02, .01, .47, 1);
                        height: 0px;
                        width: 100px;
                        transition-delay: 0ms;
                      }
                      
                      #expandable.expanded {
                        height: 100px;
                        transition-delay: 35ms;
                        transition: all 300ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      }
                      <div id="expandable"></div>
                      <br />
                      <button id="expand-button">Toggle expand</button>
                      transition: all 500ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      
                      let expandable = document.getElementById('expandable');
                      let expandButton = document.getElementById('expand-button');
                      
                      expandButton.addEventListener('click', () => {
                        expandable.classList.toggle('expanded');
                      });
                      #expandable {
                        background: red;
                        transition: all 550ms cubic-bezier(.02, .01, .47, 1);
                        height: 0px;
                        width: 100px;
                        transition-delay: 0ms;
                      }
                      
                      #expandable.expanded {
                        height: 100px;
                        transition-delay: 35ms;
                        transition: all 300ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      }
                      <div id="expandable"></div>
                      <br />
                      <button id="expand-button">Toggle expand</button>
                      transition: all 500ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      
                      let expandable = document.getElementById('expandable');
                      let expandButton = document.getElementById('expand-button');
                      
                      expandButton.addEventListener('click', () => {
                        expandable.classList.toggle('expanded');
                      });
                      #expandable {
                        background: red;
                        transition: all 550ms cubic-bezier(.02, .01, .47, 1);
                        height: 0px;
                        width: 100px;
                        transition-delay: 0ms;
                      }
                      
                      #expandable.expanded {
                        height: 100px;
                        transition-delay: 35ms;
                        transition: all 300ms cubic-bezier(0.950, 0.050, 0.795, 0.035);
                      }
                      <div id="expandable"></div>
                      <br />
                      <button id="expand-button">Toggle expand</button>
                      const expandables = document.querySelectorAll('.expandable');
                      const setInnerHeights = () => {
                        for (const expandable of expandables) {
                          expandable.style.setProperty('--inner-height', Array.from(expandable.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px');
                        }
                      };
                      setInnerHeights();
                      document.addEventListener('click', e => {
                        if (e.target?.matches('.expand-trigger')) {
                          const expandable = e.target.nextElementSibling;
                          expandable.classList[expandable.classList.contains('expanded') ? 'remove' : 'add']('expanded');
                        }
                      });
                      window.addEventListener('resize', setInnerHeights);
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: stretch;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .expandable {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                        text-align: left;
                      }
                      .expandable > p {
                        margin: 0;
                        padding: 10px 0;
                      }
                      .expandable.expanded {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <button class="expand-trigger">Expand #1</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet.</p>
                      </div>
                      <button class="expand-trigger">Expand #2</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                      </div>
                      <button class="expand-trigger">Expand #3</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                        <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                      </div>
                      const initAccordions = () => {
                        const getNode = selector => document.querySelector(selector),
                            getNodes = selector => Array.from(document.querySelectorAll(selector)),
                            findChildren = (node, selector) => Array.from(node.children).filter(e => e.matches?.(selector)),
                            findChild = (node, selector) => Array.from(node.children).find(e => e.matches?.(selector)),
                            _addInput = (node, position, id, checked) => node.insertAdjacentHTML(position, `<input type="radio" name="accordion-${id}"${checked ? ' checked="checked"' : ''}>`),
                            setInnerHeight = node => {
                              const height = Array.from(node.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px';
                              node.style.setProperty('--inner-height', height);
                            },
                            accordions = Array.from(document.querySelectorAll('.accordion'));
                        let accordionIndex = 0;
                        for (const accordion of accordions) {
                          const isToggle = accordion.dataset?.type === 'toggle',
                              panels = findChildren(accordion, '.accordion--panel');
                          let panelIndex = 0;
                          for (const panel of panels) {
                            const title = findChild(panel, '.accordion--panel--title'),
                                content = findChild(panel, '.accordion--panel--content'),
                                addInput = (node, position, checked) => _addInput(node, position, accordionIndex + (isToggle ? '-' + panelIndex : ''), checked);
                            setInnerHeight(content);
                            addInput(title, 'beforebegin');
                            addInput(title, 'afterbegin', true);
                            panelIndex++;
                          }
                          accordionIndex++;
                        }
                        window.addEventListener('resize', () => {
                          const panelContents = Array.from(document.querySelectorAll('.accordion > .accordion--panel > .accordion--panel--content'));
                          for (const content of panelContents) setInnerHeight(content);
                        });
                      };
                      initAccordions();
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: center;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio], .accordion--panel--title > [type=checkbox],
                      .accordion--panel--title > [type=radio] {
                        -webkit-appearance: none;
                           -moz-appearance: none;
                                appearance: none;
                        display: block;
                        position: absolute;
                        left: 0;
                        top: 0;
                        width: 100%;
                        height: 100%;
                        cursor: pointer;
                      }
                      .accordion--panel > [type=checkbox]:checked,
                      .accordion--panel > [type=radio]:checked, .accordion--panel--title > [type=checkbox]:checked,
                      .accordion--panel--title > [type=radio]:checked {
                        display: none;
                      }
                      .accordion--panel {
                        border-radius: 7px;
                      }
                      .accordion--panel--title {
                        background-color: #ccc;
                      }
                      .accordion--panel--content {
                        box-shadow: inset 0 0 0 2px #ccc;
                        border-radius: 0 0 7px 7px;
                      }
                      .accordion {
                        display: flex;
                        flex-direction: column;
                        gap: 10px;
                        width: 100%;
                        max-width: 500px;
                      }
                      .accordion--panel {
                        display: flex;
                        flex-direction: column;
                        position: relative;
                        overflow: hidden;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio] {
                        z-index: 1;
                      }
                      .accordion--panel--title, .accordion--panel--content {
                        padding-inline: 15px;
                      }
                      .accordion--panel--title {
                        position: relative;
                        padding-block: 10px;
                      }
                      .accordion--panel--content {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                      }
                      .accordion--panel--content--inner > p:first-child {
                        margin-top: 10px;
                      }
                      .accordion--panel--content--inner > p:last-child {
                        margin-bottom: 10px;
                      }
                      [type=checkbox]:checked ~ .accordion--panel--content, [type=radio]:checked ~ .accordion--panel--content {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <h2>Accordion Demo</h2>
                      <div class="accordion" data-type="accordion">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      <h2>Toggle Demo</h2>
                      <div class="accordion" data-type="toggle">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      const expandables = document.querySelectorAll('.expandable');
                      const setInnerHeights = () => {
                        for (const expandable of expandables) {
                          expandable.style.setProperty('--inner-height', Array.from(expandable.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px');
                        }
                      };
                      setInnerHeights();
                      document.addEventListener('click', e => {
                        if (e.target?.matches('.expand-trigger')) {
                          const expandable = e.target.nextElementSibling;
                          expandable.classList[expandable.classList.contains('expanded') ? 'remove' : 'add']('expanded');
                        }
                      });
                      window.addEventListener('resize', setInnerHeights);
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: stretch;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .expandable {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                        text-align: left;
                      }
                      .expandable > p {
                        margin: 0;
                        padding: 10px 0;
                      }
                      .expandable.expanded {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <button class="expand-trigger">Expand #1</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet.</p>
                      </div>
                      <button class="expand-trigger">Expand #2</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                      </div>
                      <button class="expand-trigger">Expand #3</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                        <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                      </div>
                      const initAccordions = () => {
                        const getNode = selector => document.querySelector(selector),
                            getNodes = selector => Array.from(document.querySelectorAll(selector)),
                            findChildren = (node, selector) => Array.from(node.children).filter(e => e.matches?.(selector)),
                            findChild = (node, selector) => Array.from(node.children).find(e => e.matches?.(selector)),
                            _addInput = (node, position, id, checked) => node.insertAdjacentHTML(position, `<input type="radio" name="accordion-${id}"${checked ? ' checked="checked"' : ''}>`),
                            setInnerHeight = node => {
                              const height = Array.from(node.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px';
                              node.style.setProperty('--inner-height', height);
                            },
                            accordions = Array.from(document.querySelectorAll('.accordion'));
                        let accordionIndex = 0;
                        for (const accordion of accordions) {
                          const isToggle = accordion.dataset?.type === 'toggle',
                              panels = findChildren(accordion, '.accordion--panel');
                          let panelIndex = 0;
                          for (const panel of panels) {
                            const title = findChild(panel, '.accordion--panel--title'),
                                content = findChild(panel, '.accordion--panel--content'),
                                addInput = (node, position, checked) => _addInput(node, position, accordionIndex + (isToggle ? '-' + panelIndex : ''), checked);
                            setInnerHeight(content);
                            addInput(title, 'beforebegin');
                            addInput(title, 'afterbegin', true);
                            panelIndex++;
                          }
                          accordionIndex++;
                        }
                        window.addEventListener('resize', () => {
                          const panelContents = Array.from(document.querySelectorAll('.accordion > .accordion--panel > .accordion--panel--content'));
                          for (const content of panelContents) setInnerHeight(content);
                        });
                      };
                      initAccordions();
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: center;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio], .accordion--panel--title > [type=checkbox],
                      .accordion--panel--title > [type=radio] {
                        -webkit-appearance: none;
                           -moz-appearance: none;
                                appearance: none;
                        display: block;
                        position: absolute;
                        left: 0;
                        top: 0;
                        width: 100%;
                        height: 100%;
                        cursor: pointer;
                      }
                      .accordion--panel > [type=checkbox]:checked,
                      .accordion--panel > [type=radio]:checked, .accordion--panel--title > [type=checkbox]:checked,
                      .accordion--panel--title > [type=radio]:checked {
                        display: none;
                      }
                      .accordion--panel {
                        border-radius: 7px;
                      }
                      .accordion--panel--title {
                        background-color: #ccc;
                      }
                      .accordion--panel--content {
                        box-shadow: inset 0 0 0 2px #ccc;
                        border-radius: 0 0 7px 7px;
                      }
                      .accordion {
                        display: flex;
                        flex-direction: column;
                        gap: 10px;
                        width: 100%;
                        max-width: 500px;
                      }
                      .accordion--panel {
                        display: flex;
                        flex-direction: column;
                        position: relative;
                        overflow: hidden;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio] {
                        z-index: 1;
                      }
                      .accordion--panel--title, .accordion--panel--content {
                        padding-inline: 15px;
                      }
                      .accordion--panel--title {
                        position: relative;
                        padding-block: 10px;
                      }
                      .accordion--panel--content {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                      }
                      .accordion--panel--content--inner > p:first-child {
                        margin-top: 10px;
                      }
                      .accordion--panel--content--inner > p:last-child {
                        margin-bottom: 10px;
                      }
                      [type=checkbox]:checked ~ .accordion--panel--content, [type=radio]:checked ~ .accordion--panel--content {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <h2>Accordion Demo</h2>
                      <div class="accordion" data-type="accordion">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      <h2>Toggle Demo</h2>
                      <div class="accordion" data-type="toggle">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      const expandables = document.querySelectorAll('.expandable');
                      const setInnerHeights = () => {
                        for (const expandable of expandables) {
                          expandable.style.setProperty('--inner-height', Array.from(expandable.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px');
                        }
                      };
                      setInnerHeights();
                      document.addEventListener('click', e => {
                        if (e.target?.matches('.expand-trigger')) {
                          const expandable = e.target.nextElementSibling;
                          expandable.classList[expandable.classList.contains('expanded') ? 'remove' : 'add']('expanded');
                        }
                      });
                      window.addEventListener('resize', setInnerHeights);
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: stretch;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .expandable {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                        text-align: left;
                      }
                      .expandable > p {
                        margin: 0;
                        padding: 10px 0;
                      }
                      .expandable.expanded {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <button class="expand-trigger">Expand #1</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet.</p>
                      </div>
                      <button class="expand-trigger">Expand #2</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                      </div>
                      <button class="expand-trigger">Expand #3</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                        <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                      </div>
                      const initAccordions = () => {
                        const getNode = selector => document.querySelector(selector),
                            getNodes = selector => Array.from(document.querySelectorAll(selector)),
                            findChildren = (node, selector) => Array.from(node.children).filter(e => e.matches?.(selector)),
                            findChild = (node, selector) => Array.from(node.children).find(e => e.matches?.(selector)),
                            _addInput = (node, position, id, checked) => node.insertAdjacentHTML(position, `<input type="radio" name="accordion-${id}"${checked ? ' checked="checked"' : ''}>`),
                            setInnerHeight = node => {
                              const height = Array.from(node.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px';
                              node.style.setProperty('--inner-height', height);
                            },
                            accordions = Array.from(document.querySelectorAll('.accordion'));
                        let accordionIndex = 0;
                        for (const accordion of accordions) {
                          const isToggle = accordion.dataset?.type === 'toggle',
                              panels = findChildren(accordion, '.accordion--panel');
                          let panelIndex = 0;
                          for (const panel of panels) {
                            const title = findChild(panel, '.accordion--panel--title'),
                                content = findChild(panel, '.accordion--panel--content'),
                                addInput = (node, position, checked) => _addInput(node, position, accordionIndex + (isToggle ? '-' + panelIndex : ''), checked);
                            setInnerHeight(content);
                            addInput(title, 'beforebegin');
                            addInput(title, 'afterbegin', true);
                            panelIndex++;
                          }
                          accordionIndex++;
                        }
                        window.addEventListener('resize', () => {
                          const panelContents = Array.from(document.querySelectorAll('.accordion > .accordion--panel > .accordion--panel--content'));
                          for (const content of panelContents) setInnerHeight(content);
                        });
                      };
                      initAccordions();
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: center;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio], .accordion--panel--title > [type=checkbox],
                      .accordion--panel--title > [type=radio] {
                        -webkit-appearance: none;
                           -moz-appearance: none;
                                appearance: none;
                        display: block;
                        position: absolute;
                        left: 0;
                        top: 0;
                        width: 100%;
                        height: 100%;
                        cursor: pointer;
                      }
                      .accordion--panel > [type=checkbox]:checked,
                      .accordion--panel > [type=radio]:checked, .accordion--panel--title > [type=checkbox]:checked,
                      .accordion--panel--title > [type=radio]:checked {
                        display: none;
                      }
                      .accordion--panel {
                        border-radius: 7px;
                      }
                      .accordion--panel--title {
                        background-color: #ccc;
                      }
                      .accordion--panel--content {
                        box-shadow: inset 0 0 0 2px #ccc;
                        border-radius: 0 0 7px 7px;
                      }
                      .accordion {
                        display: flex;
                        flex-direction: column;
                        gap: 10px;
                        width: 100%;
                        max-width: 500px;
                      }
                      .accordion--panel {
                        display: flex;
                        flex-direction: column;
                        position: relative;
                        overflow: hidden;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio] {
                        z-index: 1;
                      }
                      .accordion--panel--title, .accordion--panel--content {
                        padding-inline: 15px;
                      }
                      .accordion--panel--title {
                        position: relative;
                        padding-block: 10px;
                      }
                      .accordion--panel--content {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                      }
                      .accordion--panel--content--inner > p:first-child {
                        margin-top: 10px;
                      }
                      .accordion--panel--content--inner > p:last-child {
                        margin-bottom: 10px;
                      }
                      [type=checkbox]:checked ~ .accordion--panel--content, [type=radio]:checked ~ .accordion--panel--content {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <h2>Accordion Demo</h2>
                      <div class="accordion" data-type="accordion">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      <h2>Toggle Demo</h2>
                      <div class="accordion" data-type="toggle">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      const expandables = document.querySelectorAll('.expandable');
                      const setInnerHeights = () => {
                        for (const expandable of expandables) {
                          expandable.style.setProperty('--inner-height', Array.from(expandable.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px');
                        }
                      };
                      setInnerHeights();
                      document.addEventListener('click', e => {
                        if (e.target?.matches('.expand-trigger')) {
                          const expandable = e.target.nextElementSibling;
                          expandable.classList[expandable.classList.contains('expanded') ? 'remove' : 'add']('expanded');
                        }
                      });
                      window.addEventListener('resize', setInnerHeights);
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: stretch;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .expandable {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                        text-align: left;
                      }
                      .expandable > p {
                        margin: 0;
                        padding: 10px 0;
                      }
                      .expandable.expanded {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <button class="expand-trigger">Expand #1</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet.</p>
                      </div>
                      <button class="expand-trigger">Expand #2</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                      </div>
                      <button class="expand-trigger">Expand #3</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                        <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                      </div>
                      const initAccordions = () => {
                        const getNode = selector => document.querySelector(selector),
                            getNodes = selector => Array.from(document.querySelectorAll(selector)),
                            findChildren = (node, selector) => Array.from(node.children).filter(e => e.matches?.(selector)),
                            findChild = (node, selector) => Array.from(node.children).find(e => e.matches?.(selector)),
                            _addInput = (node, position, id, checked) => node.insertAdjacentHTML(position, `<input type="radio" name="accordion-${id}"${checked ? ' checked="checked"' : ''}>`),
                            setInnerHeight = node => {
                              const height = Array.from(node.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px';
                              node.style.setProperty('--inner-height', height);
                            },
                            accordions = Array.from(document.querySelectorAll('.accordion'));
                        let accordionIndex = 0;
                        for (const accordion of accordions) {
                          const isToggle = accordion.dataset?.type === 'toggle',
                              panels = findChildren(accordion, '.accordion--panel');
                          let panelIndex = 0;
                          for (const panel of panels) {
                            const title = findChild(panel, '.accordion--panel--title'),
                                content = findChild(panel, '.accordion--panel--content'),
                                addInput = (node, position, checked) => _addInput(node, position, accordionIndex + (isToggle ? '-' + panelIndex : ''), checked);
                            setInnerHeight(content);
                            addInput(title, 'beforebegin');
                            addInput(title, 'afterbegin', true);
                            panelIndex++;
                          }
                          accordionIndex++;
                        }
                        window.addEventListener('resize', () => {
                          const panelContents = Array.from(document.querySelectorAll('.accordion > .accordion--panel > .accordion--panel--content'));
                          for (const content of panelContents) setInnerHeight(content);
                        });
                      };
                      initAccordions();
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: center;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio], .accordion--panel--title > [type=checkbox],
                      .accordion--panel--title > [type=radio] {
                        -webkit-appearance: none;
                           -moz-appearance: none;
                                appearance: none;
                        display: block;
                        position: absolute;
                        left: 0;
                        top: 0;
                        width: 100%;
                        height: 100%;
                        cursor: pointer;
                      }
                      .accordion--panel > [type=checkbox]:checked,
                      .accordion--panel > [type=radio]:checked, .accordion--panel--title > [type=checkbox]:checked,
                      .accordion--panel--title > [type=radio]:checked {
                        display: none;
                      }
                      .accordion--panel {
                        border-radius: 7px;
                      }
                      .accordion--panel--title {
                        background-color: #ccc;
                      }
                      .accordion--panel--content {
                        box-shadow: inset 0 0 0 2px #ccc;
                        border-radius: 0 0 7px 7px;
                      }
                      .accordion {
                        display: flex;
                        flex-direction: column;
                        gap: 10px;
                        width: 100%;
                        max-width: 500px;
                      }
                      .accordion--panel {
                        display: flex;
                        flex-direction: column;
                        position: relative;
                        overflow: hidden;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio] {
                        z-index: 1;
                      }
                      .accordion--panel--title, .accordion--panel--content {
                        padding-inline: 15px;
                      }
                      .accordion--panel--title {
                        position: relative;
                        padding-block: 10px;
                      }
                      .accordion--panel--content {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                      }
                      .accordion--panel--content--inner > p:first-child {
                        margin-top: 10px;
                      }
                      .accordion--panel--content--inner > p:last-child {
                        margin-bottom: 10px;
                      }
                      [type=checkbox]:checked ~ .accordion--panel--content, [type=radio]:checked ~ .accordion--panel--content {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <h2>Accordion Demo</h2>
                      <div class="accordion" data-type="accordion">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      <h2>Toggle Demo</h2>
                      <div class="accordion" data-type="toggle">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      const expandables = document.querySelectorAll('.expandable');
                      const setInnerHeights = () => {
                        for (const expandable of expandables) {
                          expandable.style.setProperty('--inner-height', Array.from(expandable.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px');
                        }
                      };
                      setInnerHeights();
                      document.addEventListener('click', e => {
                        if (e.target?.matches('.expand-trigger')) {
                          const expandable = e.target.nextElementSibling;
                          expandable.classList[expandable.classList.contains('expanded') ? 'remove' : 'add']('expanded');
                        }
                      });
                      window.addEventListener('resize', setInnerHeights);
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: stretch;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .expandable {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                        text-align: left;
                      }
                      .expandable > p {
                        margin: 0;
                        padding: 10px 0;
                      }
                      .expandable.expanded {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <button class="expand-trigger">Expand #1</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet.</p>
                      </div>
                      <button class="expand-trigger">Expand #2</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                      </div>
                      <button class="expand-trigger">Expand #3</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                        <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                      </div>
                      const initAccordions = () => {
                        const getNode = selector => document.querySelector(selector),
                            getNodes = selector => Array.from(document.querySelectorAll(selector)),
                            findChildren = (node, selector) => Array.from(node.children).filter(e => e.matches?.(selector)),
                            findChild = (node, selector) => Array.from(node.children).find(e => e.matches?.(selector)),
                            _addInput = (node, position, id, checked) => node.insertAdjacentHTML(position, `<input type="radio" name="accordion-${id}"${checked ? ' checked="checked"' : ''}>`),
                            setInnerHeight = node => {
                              const height = Array.from(node.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px';
                              node.style.setProperty('--inner-height', height);
                            },
                            accordions = Array.from(document.querySelectorAll('.accordion'));
                        let accordionIndex = 0;
                        for (const accordion of accordions) {
                          const isToggle = accordion.dataset?.type === 'toggle',
                              panels = findChildren(accordion, '.accordion--panel');
                          let panelIndex = 0;
                          for (const panel of panels) {
                            const title = findChild(panel, '.accordion--panel--title'),
                                content = findChild(panel, '.accordion--panel--content'),
                                addInput = (node, position, checked) => _addInput(node, position, accordionIndex + (isToggle ? '-' + panelIndex : ''), checked);
                            setInnerHeight(content);
                            addInput(title, 'beforebegin');
                            addInput(title, 'afterbegin', true);
                            panelIndex++;
                          }
                          accordionIndex++;
                        }
                        window.addEventListener('resize', () => {
                          const panelContents = Array.from(document.querySelectorAll('.accordion > .accordion--panel > .accordion--panel--content'));
                          for (const content of panelContents) setInnerHeight(content);
                        });
                      };
                      initAccordions();
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: center;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio], .accordion--panel--title > [type=checkbox],
                      .accordion--panel--title > [type=radio] {
                        -webkit-appearance: none;
                           -moz-appearance: none;
                                appearance: none;
                        display: block;
                        position: absolute;
                        left: 0;
                        top: 0;
                        width: 100%;
                        height: 100%;
                        cursor: pointer;
                      }
                      .accordion--panel > [type=checkbox]:checked,
                      .accordion--panel > [type=radio]:checked, .accordion--panel--title > [type=checkbox]:checked,
                      .accordion--panel--title > [type=radio]:checked {
                        display: none;
                      }
                      .accordion--panel {
                        border-radius: 7px;
                      }
                      .accordion--panel--title {
                        background-color: #ccc;
                      }
                      .accordion--panel--content {
                        box-shadow: inset 0 0 0 2px #ccc;
                        border-radius: 0 0 7px 7px;
                      }
                      .accordion {
                        display: flex;
                        flex-direction: column;
                        gap: 10px;
                        width: 100%;
                        max-width: 500px;
                      }
                      .accordion--panel {
                        display: flex;
                        flex-direction: column;
                        position: relative;
                        overflow: hidden;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio] {
                        z-index: 1;
                      }
                      .accordion--panel--title, .accordion--panel--content {
                        padding-inline: 15px;
                      }
                      .accordion--panel--title {
                        position: relative;
                        padding-block: 10px;
                      }
                      .accordion--panel--content {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                      }
                      .accordion--panel--content--inner > p:first-child {
                        margin-top: 10px;
                      }
                      .accordion--panel--content--inner > p:last-child {
                        margin-bottom: 10px;
                      }
                      [type=checkbox]:checked ~ .accordion--panel--content, [type=radio]:checked ~ .accordion--panel--content {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <h2>Accordion Demo</h2>
                      <div class="accordion" data-type="accordion">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      <h2>Toggle Demo</h2>
                      <div class="accordion" data-type="toggle">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      const expandables = document.querySelectorAll('.expandable');
                      const setInnerHeights = () => {
                        for (const expandable of expandables) {
                          expandable.style.setProperty('--inner-height', Array.from(expandable.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px');
                        }
                      };
                      setInnerHeights();
                      document.addEventListener('click', e => {
                        if (e.target?.matches('.expand-trigger')) {
                          const expandable = e.target.nextElementSibling;
                          expandable.classList[expandable.classList.contains('expanded') ? 'remove' : 'add']('expanded');
                        }
                      });
                      window.addEventListener('resize', setInnerHeights);
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: stretch;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .expandable {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                        text-align: left;
                      }
                      .expandable > p {
                        margin: 0;
                        padding: 10px 0;
                      }
                      .expandable.expanded {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <button class="expand-trigger">Expand #1</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet.</p>
                      </div>
                      <button class="expand-trigger">Expand #2</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                      </div>
                      <button class="expand-trigger">Expand #3</button>
                      <div class="expandable">
                        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                        <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                      </div>
                      const initAccordions = () => {
                        const getNode = selector => document.querySelector(selector),
                            getNodes = selector => Array.from(document.querySelectorAll(selector)),
                            findChildren = (node, selector) => Array.from(node.children).filter(e => e.matches?.(selector)),
                            findChild = (node, selector) => Array.from(node.children).find(e => e.matches?.(selector)),
                            _addInput = (node, position, id, checked) => node.insertAdjacentHTML(position, `<input type="radio" name="accordion-${id}"${checked ? ' checked="checked"' : ''}>`),
                            setInnerHeight = node => {
                              const height = Array.from(node.children).map(child => child.offsetHeight).reduce((a, c) => a + c, 0) + 'px';
                              node.style.setProperty('--inner-height', height);
                            },
                            accordions = Array.from(document.querySelectorAll('.accordion'));
                        let accordionIndex = 0;
                        for (const accordion of accordions) {
                          const isToggle = accordion.dataset?.type === 'toggle',
                              panels = findChildren(accordion, '.accordion--panel');
                          let panelIndex = 0;
                          for (const panel of panels) {
                            const title = findChild(panel, '.accordion--panel--title'),
                                content = findChild(panel, '.accordion--panel--content'),
                                addInput = (node, position, checked) => _addInput(node, position, accordionIndex + (isToggle ? '-' + panelIndex : ''), checked);
                            setInnerHeight(content);
                            addInput(title, 'beforebegin');
                            addInput(title, 'afterbegin', true);
                            panelIndex++;
                          }
                          accordionIndex++;
                        }
                        window.addEventListener('resize', () => {
                          const panelContents = Array.from(document.querySelectorAll('.accordion > .accordion--panel > .accordion--panel--content'));
                          for (const content of panelContents) setInnerHeight(content);
                        });
                      };
                      initAccordions();
                      html {
                        height: 100%;
                        box-sizing: border-box;
                      }
                      *, *::before, *::after {
                        box-sizing: inherit;
                      }
                      body {
                        display: flex;
                        flex-direction: column;
                        align-items: center;
                        justify-content: flex-start;
                        min-height: 100%;
                        padding: 20px;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio], .accordion--panel--title > [type=checkbox],
                      .accordion--panel--title > [type=radio] {
                        -webkit-appearance: none;
                           -moz-appearance: none;
                                appearance: none;
                        display: block;
                        position: absolute;
                        left: 0;
                        top: 0;
                        width: 100%;
                        height: 100%;
                        cursor: pointer;
                      }
                      .accordion--panel > [type=checkbox]:checked,
                      .accordion--panel > [type=radio]:checked, .accordion--panel--title > [type=checkbox]:checked,
                      .accordion--panel--title > [type=radio]:checked {
                        display: none;
                      }
                      .accordion--panel {
                        border-radius: 7px;
                      }
                      .accordion--panel--title {
                        background-color: #ccc;
                      }
                      .accordion--panel--content {
                        box-shadow: inset 0 0 0 2px #ccc;
                        border-radius: 0 0 7px 7px;
                      }
                      .accordion {
                        display: flex;
                        flex-direction: column;
                        gap: 10px;
                        width: 100%;
                        max-width: 500px;
                      }
                      .accordion--panel {
                        display: flex;
                        flex-direction: column;
                        position: relative;
                        overflow: hidden;
                      }
                      .accordion--panel > [type=checkbox],
                      .accordion--panel > [type=radio] {
                        z-index: 1;
                      }
                      .accordion--panel--title, .accordion--panel--content {
                        padding-inline: 15px;
                      }
                      .accordion--panel--title {
                        position: relative;
                        padding-block: 10px;
                      }
                      .accordion--panel--content {
                        max-height: 0;
                        overflow: hidden;
                        transition: max-height 0.25s cubic-bezier(0.95, 0.05, 0.795, 0.035);
                      }
                      .accordion--panel--content--inner > p:first-child {
                        margin-top: 10px;
                      }
                      .accordion--panel--content--inner > p:last-child {
                        margin-bottom: 10px;
                      }
                      [type=checkbox]:checked ~ .accordion--panel--content, [type=radio]:checked ~ .accordion--panel--content {
                        --content-height: calc(var(--inner-height) + 20px);
                        max-height: var(--content-height, unset);
                      }
                      <h2>Accordion Demo</h2>
                      <div class="accordion" data-type="accordion">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>
                      <h2>Toggle Demo</h2>
                      <div class="accordion" data-type="toggle">
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #1</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #2</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                            </div>
                          </div>
                        </div>
                        <div class="accordion--panel">
                          <div class="accordion--panel--title">Title #3</div>
                          <div class="accordion--panel--content">
                            <div class="accordion--panel--content--inner">
                              <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam mi purus, interdum id mattis et, posuere nec urna. Mauris in ornare sem. Phasellus non eros augue. Fusce tempus bibendum mauris, vel luctus est viverra eget. Cras vitae lectus magna. Integer vulputate est ut felis dictum consectetur. Nunc vitae enim at sem rhoncus aliquet et id risus. Etiam faucibus quis turpis eu pellentesque. Aliquam dictum lorem nec orci finibus commodo. Etiam tincidunt lacinia consectetur. Praesent tortor lorem, imperdiet sed varius vel, varius ac quam. Vestibulum aliquam lorem sem, sit amet imperdiet purus commodo eu. Integer a iaculis tortor.</p>
                              <p>Integer convallis lectus eu felis bibendum, vel lacinia metus imperdiet. Maecenas vulputate, quam vitae tempus pretium, erat felis euismod risus, nec blandit leo mi eget purus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer at neque laoreet, egestas dui ut, bibendum lorem. Maecenas elementum odio a congue facilisis. Vivamus risus urna, vestibulum egestas sem nec, lacinia volutpat metus. Suspendisse potenti. Suspendisse ullamcorper commodo libero, sed rhoncus nibh porta in. Donec mi felis, posuere luctus varius ac, faucibus vitae erat.</p>
                            </div>
                          </div>
                        </div>
                      </div>

                      how to restrict drag elements in interact.js

                      copy iconCopydownload iconDownload
                      <table>
                        <div>
                      </table>
                        </div>
                      
                      window.dragMoveListener = dragMoveListener;
                      interact('.signer')
                        .draggable({
                          onmove: dragMoveListener,
                          inertia: true,
                          autoScroll: true,
                          restrict: {
                            elementRect: {
                              top: 0,
                              left: 0,
                              bottom: 1,
                              right: 1
                            }
                          }
                        })
                        .resizable({
                          onmove: resizeMoveListener,
                          inertia: true,
                          edges: {
                            left: true,
                            right: true,
                            bottom: true,
                            top: true
                          }
                        })
                      
                      const boxes = document.getElementsByClassName("signer");
                      
                      function dragMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.dx,
                          y: event.target.offsetTop + event.dy,
                          width: event.target.offsetWidth,
                          height: event.target.offsetHeight
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = event.target.offsetLeft + event.dx + "px";
                          event.target.style.top = event.target.offsetTop + event.dy + "px";
                          setInfo(self);
                        }
                      }
                      
                      function resizeMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.deltaRect.left,
                          y: event.target.offsetTop + event.deltaRect.top,
                          width: event.target.offsetWidth + event.deltaRect.width,
                          height: event.target.offsetHeight + event.deltaRect.height
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = self.x + "px";
                          event.target.style.top = self.y + "px";
                          event.target.style.width = self.width + "px";
                          event.target.style.height = self.height + "px";
                          setInfo(self);
                        }
                      }
                      
                      function setInfo(dimensions) {
                        document.getElementById("x").value = dimensions.x;
                        document.getElementById("y").value = dimensions.y;
                        document.getElementById("width").value = dimensions.width;
                        document.getElementById("height").value = dimensions.height;
                      }
                      
                      function collides(self, event) {
                        for (const box of boxes) {
                          if (box == event.target) {
                            continue;
                          }
                      
                          const other = {
                            x: box.offsetLeft,
                            y: box.offsetTop,
                            width: box.offsetWidth,
                            height: box.offsetHeight
                          }
                      
                          const collisionX = Math.max(self.x + self.width, other.x + other.width) - Math.min(self.x, other.x) < self.width + other.width;
                          const collisionY = Math.max(self.y + self.height, other.y + other.height) - Math.min(self.y, other.y) < self.height + other.height;
                      
                          if (collisionX && collisionY) {
                            return true;
                          }
                        }
                        return false;
                      }
                      .signer {
                        top: 0;
                        left: 0;
                        position: absolute;
                        background: #29e no-repeat 50% 50%;
                        background-size: 50%;
                        color: white;
                        font-size: 20px;
                        font-family: sans-serif;
                        border-radius: 8px;
                        width: 180px;
                        height: 150px;
                        opacity: 0.8;
                        box-sizing: border-box;
                        box-shadow: rgb(0, 0, 0, 0.7) 0.2em 0.2em 0.5em;
                        -ms-touch-action: none;
                        touch-action: none;
                      }
                      
                      .signer:nth-child(2) {
                        left: 300px;
                      }
                      
                      #values {
                        position: fixed;
                        bottom: 0;
                        height: 40;
                      }
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                      </head>
                      
                      <body>
                        <div id="pdf-container">
                          <img id="pdf-page" src="data:image/png;base64,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WAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhKVDAAAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWDoEAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEpUMAAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAOD/2q9jAgAAAIBg/VsLYovgA2AsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwlAAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAABgLCUAAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAsBF9Ip71RRoBHwAAAABJRU5ErkJggg=="
                          />
                          <div class="signer"></div>
                          <div class="signer"></div>
                        </div>
                        <div id="values">
                          <label>X:
                              <input id="x" readonly>
                            </label>
                          <label>Y:
                              <input id="y" readonly>
                            </label>
                          <label>Width:
                              <input id="width" readonly>
                            </label>
                          <label>Height:
                              <input id="height" readonly>
                            </label>
                        </div>
                      
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.worker.min.js'></script>
                      </body>
                      
                      </html>
                      <table>
                        <div>
                      </table>
                        </div>
                      
                      window.dragMoveListener = dragMoveListener;
                      interact('.signer')
                        .draggable({
                          onmove: dragMoveListener,
                          inertia: true,
                          autoScroll: true,
                          restrict: {
                            elementRect: {
                              top: 0,
                              left: 0,
                              bottom: 1,
                              right: 1
                            }
                          }
                        })
                        .resizable({
                          onmove: resizeMoveListener,
                          inertia: true,
                          edges: {
                            left: true,
                            right: true,
                            bottom: true,
                            top: true
                          }
                        })
                      
                      const boxes = document.getElementsByClassName("signer");
                      
                      function dragMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.dx,
                          y: event.target.offsetTop + event.dy,
                          width: event.target.offsetWidth,
                          height: event.target.offsetHeight
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = event.target.offsetLeft + event.dx + "px";
                          event.target.style.top = event.target.offsetTop + event.dy + "px";
                          setInfo(self);
                        }
                      }
                      
                      function resizeMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.deltaRect.left,
                          y: event.target.offsetTop + event.deltaRect.top,
                          width: event.target.offsetWidth + event.deltaRect.width,
                          height: event.target.offsetHeight + event.deltaRect.height
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = self.x + "px";
                          event.target.style.top = self.y + "px";
                          event.target.style.width = self.width + "px";
                          event.target.style.height = self.height + "px";
                          setInfo(self);
                        }
                      }
                      
                      function setInfo(dimensions) {
                        document.getElementById("x").value = dimensions.x;
                        document.getElementById("y").value = dimensions.y;
                        document.getElementById("width").value = dimensions.width;
                        document.getElementById("height").value = dimensions.height;
                      }
                      
                      function collides(self, event) {
                        for (const box of boxes) {
                          if (box == event.target) {
                            continue;
                          }
                      
                          const other = {
                            x: box.offsetLeft,
                            y: box.offsetTop,
                            width: box.offsetWidth,
                            height: box.offsetHeight
                          }
                      
                          const collisionX = Math.max(self.x + self.width, other.x + other.width) - Math.min(self.x, other.x) < self.width + other.width;
                          const collisionY = Math.max(self.y + self.height, other.y + other.height) - Math.min(self.y, other.y) < self.height + other.height;
                      
                          if (collisionX && collisionY) {
                            return true;
                          }
                        }
                        return false;
                      }
                      .signer {
                        top: 0;
                        left: 0;
                        position: absolute;
                        background: #29e no-repeat 50% 50%;
                        background-size: 50%;
                        color: white;
                        font-size: 20px;
                        font-family: sans-serif;
                        border-radius: 8px;
                        width: 180px;
                        height: 150px;
                        opacity: 0.8;
                        box-sizing: border-box;
                        box-shadow: rgb(0, 0, 0, 0.7) 0.2em 0.2em 0.5em;
                        -ms-touch-action: none;
                        touch-action: none;
                      }
                      
                      .signer:nth-child(2) {
                        left: 300px;
                      }
                      
                      #values {
                        position: fixed;
                        bottom: 0;
                        height: 40;
                      }
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                      </head>
                      
                      <body>
                        <div id="pdf-container">
                          <img id="pdf-page" src="data:image/png;base64,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WAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhKVDAAAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWDoEAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEpUMAAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAOD/2q9jAgAAAIBg/VsLYovgA2AsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwlAAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAABgLCUAAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAsBF9Ip71RRoBHwAAAABJRU5ErkJggg=="
                          />
                          <div class="signer"></div>
                          <div class="signer"></div>
                        </div>
                        <div id="values">
                          <label>X:
                              <input id="x" readonly>
                            </label>
                          <label>Y:
                              <input id="y" readonly>
                            </label>
                          <label>Width:
                              <input id="width" readonly>
                            </label>
                          <label>Height:
                              <input id="height" readonly>
                            </label>
                        </div>
                      
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.worker.min.js'></script>
                      </body>
                      
                      </html>
                      <table>
                        <div>
                      </table>
                        </div>
                      
                      window.dragMoveListener = dragMoveListener;
                      interact('.signer')
                        .draggable({
                          onmove: dragMoveListener,
                          inertia: true,
                          autoScroll: true,
                          restrict: {
                            elementRect: {
                              top: 0,
                              left: 0,
                              bottom: 1,
                              right: 1
                            }
                          }
                        })
                        .resizable({
                          onmove: resizeMoveListener,
                          inertia: true,
                          edges: {
                            left: true,
                            right: true,
                            bottom: true,
                            top: true
                          }
                        })
                      
                      const boxes = document.getElementsByClassName("signer");
                      
                      function dragMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.dx,
                          y: event.target.offsetTop + event.dy,
                          width: event.target.offsetWidth,
                          height: event.target.offsetHeight
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = event.target.offsetLeft + event.dx + "px";
                          event.target.style.top = event.target.offsetTop + event.dy + "px";
                          setInfo(self);
                        }
                      }
                      
                      function resizeMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.deltaRect.left,
                          y: event.target.offsetTop + event.deltaRect.top,
                          width: event.target.offsetWidth + event.deltaRect.width,
                          height: event.target.offsetHeight + event.deltaRect.height
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = self.x + "px";
                          event.target.style.top = self.y + "px";
                          event.target.style.width = self.width + "px";
                          event.target.style.height = self.height + "px";
                          setInfo(self);
                        }
                      }
                      
                      function setInfo(dimensions) {
                        document.getElementById("x").value = dimensions.x;
                        document.getElementById("y").value = dimensions.y;
                        document.getElementById("width").value = dimensions.width;
                        document.getElementById("height").value = dimensions.height;
                      }
                      
                      function collides(self, event) {
                        for (const box of boxes) {
                          if (box == event.target) {
                            continue;
                          }
                      
                          const other = {
                            x: box.offsetLeft,
                            y: box.offsetTop,
                            width: box.offsetWidth,
                            height: box.offsetHeight
                          }
                      
                          const collisionX = Math.max(self.x + self.width, other.x + other.width) - Math.min(self.x, other.x) < self.width + other.width;
                          const collisionY = Math.max(self.y + self.height, other.y + other.height) - Math.min(self.y, other.y) < self.height + other.height;
                      
                          if (collisionX && collisionY) {
                            return true;
                          }
                        }
                        return false;
                      }
                      .signer {
                        top: 0;
                        left: 0;
                        position: absolute;
                        background: #29e no-repeat 50% 50%;
                        background-size: 50%;
                        color: white;
                        font-size: 20px;
                        font-family: sans-serif;
                        border-radius: 8px;
                        width: 180px;
                        height: 150px;
                        opacity: 0.8;
                        box-sizing: border-box;
                        box-shadow: rgb(0, 0, 0, 0.7) 0.2em 0.2em 0.5em;
                        -ms-touch-action: none;
                        touch-action: none;
                      }
                      
                      .signer:nth-child(2) {
                        left: 300px;
                      }
                      
                      #values {
                        position: fixed;
                        bottom: 0;
                        height: 40;
                      }
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                      </head>
                      
                      <body>
                        <div id="pdf-container">
                          <img id="pdf-page" src="data:image/png;base64,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WAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhKVDAAAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWDoEAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEpUMAAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAOD/2q9jAgAAAIBg/VsLYovgA2AsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwlAAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAABgLCUAAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAsBF9Ip71RRoBHwAAAABJRU5ErkJggg=="
                          />
                          <div class="signer"></div>
                          <div class="signer"></div>
                        </div>
                        <div id="values">
                          <label>X:
                              <input id="x" readonly>
                            </label>
                          <label>Y:
                              <input id="y" readonly>
                            </label>
                          <label>Width:
                              <input id="width" readonly>
                            </label>
                          <label>Height:
                              <input id="height" readonly>
                            </label>
                        </div>
                      
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.worker.min.js'></script>
                      </body>
                      
                      </html>
                      <table>
                        <div>
                      </table>
                        </div>
                      
                      window.dragMoveListener = dragMoveListener;
                      interact('.signer')
                        .draggable({
                          onmove: dragMoveListener,
                          inertia: true,
                          autoScroll: true,
                          restrict: {
                            elementRect: {
                              top: 0,
                              left: 0,
                              bottom: 1,
                              right: 1
                            }
                          }
                        })
                        .resizable({
                          onmove: resizeMoveListener,
                          inertia: true,
                          edges: {
                            left: true,
                            right: true,
                            bottom: true,
                            top: true
                          }
                        })
                      
                      const boxes = document.getElementsByClassName("signer");
                      
                      function dragMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.dx,
                          y: event.target.offsetTop + event.dy,
                          width: event.target.offsetWidth,
                          height: event.target.offsetHeight
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = event.target.offsetLeft + event.dx + "px";
                          event.target.style.top = event.target.offsetTop + event.dy + "px";
                          setInfo(self);
                        }
                      }
                      
                      function resizeMoveListener(event) {
                        const self = {
                          x: event.target.offsetLeft + event.deltaRect.left,
                          y: event.target.offsetTop + event.deltaRect.top,
                          width: event.target.offsetWidth + event.deltaRect.width,
                          height: event.target.offsetHeight + event.deltaRect.height
                        }
                      
                        if (!collides(self, event)) {
                          event.target.style.left = self.x + "px";
                          event.target.style.top = self.y + "px";
                          event.target.style.width = self.width + "px";
                          event.target.style.height = self.height + "px";
                          setInfo(self);
                        }
                      }
                      
                      function setInfo(dimensions) {
                        document.getElementById("x").value = dimensions.x;
                        document.getElementById("y").value = dimensions.y;
                        document.getElementById("width").value = dimensions.width;
                        document.getElementById("height").value = dimensions.height;
                      }
                      
                      function collides(self, event) {
                        for (const box of boxes) {
                          if (box == event.target) {
                            continue;
                          }
                      
                          const other = {
                            x: box.offsetLeft,
                            y: box.offsetTop,
                            width: box.offsetWidth,
                            height: box.offsetHeight
                          }
                      
                          const collisionX = Math.max(self.x + self.width, other.x + other.width) - Math.min(self.x, other.x) < self.width + other.width;
                          const collisionY = Math.max(self.y + self.height, other.y + other.height) - Math.min(self.y, other.y) < self.height + other.height;
                      
                          if (collisionX && collisionY) {
                            return true;
                          }
                        }
                        return false;
                      }
                      .signer {
                        top: 0;
                        left: 0;
                        position: absolute;
                        background: #29e no-repeat 50% 50%;
                        background-size: 50%;
                        color: white;
                        font-size: 20px;
                        font-family: sans-serif;
                        border-radius: 8px;
                        width: 180px;
                        height: 150px;
                        opacity: 0.8;
                        box-sizing: border-box;
                        box-shadow: rgb(0, 0, 0, 0.7) 0.2em 0.2em 0.5em;
                        -ms-touch-action: none;
                        touch-action: none;
                      }
                      
                      .signer:nth-child(2) {
                        left: 300px;
                      }
                      
                      #values {
                        position: fixed;
                        bottom: 0;
                        height: 40;
                      }
                      <!DOCTYPE html>
                      <html>
                      
                      <head>
                      </head>
                      
                      <body>
                        <div id="pdf-container">
                          <img id="pdf-page" src="data:image/png;base64,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WAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhKVDAAAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWDoEAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEpUMAAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAOD/2q9jAgAAAIBg/VsLYovgA2AsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwlAAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAABgLCUAAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAsBF9Ip71RRoBHwAAAABJRU5ErkJggg=="
                          />
                          <div class="signer"></div>
                          <div class="signer"></div>
                        </div>
                        <div id="values">
                          <label>X:
                              <input id="x" readonly>
                            </label>
                          <label>Y:
                              <input id="y" readonly>
                            </label>
                          <label>Width:
                              <input id="width" readonly>
                            </label>
                          <label>Height:
                              <input id="height" readonly>
                            </label>
                        </div>
                      
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.worker.min.js'></script>
                      </body>
                      
                      </html>
                      window.dragMoveListener = dragMoveListener;
                      
                      interact('.signer-box')
                        .draggable({
                          onmove: dragMoveListener,
                          inertia: true,
                          autoScroll: true,
                          restrict: {
                            elementRect: {
                              top: 0,
                              left: 0,
                              bottom: 1,
                              right: 1
                            }
                          }
                        })
                        .resizable({
                          onmove: resizeMoveListener,
                          inertia: true,
                          edges: {
                            left: true,
                            right: true,
                            bottom: true,
                            top: true
                          }
                        })
                      
                      const boxes = document.getElementsByClassName("signer-box");
                      
                      function dragMoveListener(event) {
                      
                        const self = {
                          x: (parseFloat(event.target.getAttribute('data-x')) || 0) + event.dx,
                          y: (parseFloat(event.target.getAttribute('data-y')) || 0) + event.dy,
                          width: event.target.offsetWidth,
                          height: event.target.offsetHeight
                        };
                      
                        if (!collides(self, event)) {
                          var target = event.target;
                          var x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
                          var y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
                          target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
                          target.setAttribute('data-x', x);
                          target.setAttribute('data-y', y);
                      
                          computeSignerBoxPosition(event.target);
                        }
                      
                      }
                      
                      function resizeMoveListener(event) {
                      
                        const self = {
                          x: (parseFloat(event.target.getAttribute('data-x')) || 0) + event.deltaRect.left,
                          y: (parseFloat(event.target.getAttribute('data-y')) || 0) + event.deltaRect.top,
                          width: event.rect.width,
                          height: event.rect.height
                        }
                      
                        if (!collides(self, event)) {
                          var target = event.target;
                          var x = (parseFloat(target.getAttribute('data-x')) || 0);
                          var y = (parseFloat(target.getAttribute('data-y')) || 0);
                          x += event.deltaRect.left;
                          y += event.deltaRect.top;
                      
                          target.style.width = event.rect.width + 'px';
                          target.style.height = event.rect.height + 'px';
                          target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px,' + y + 'px)';
                          target.setAttribute('data-x', x);
                          target.setAttribute('data-y', y);
                      
                          computeSignerBoxPosition(event.target);
                        }
                      }
                      
                      function collides(self, event, tag = "") {
                        for (const box of boxes) {
                          if (box == event.target) {
                            continue;
                          }
                      
                          const other = {
                            x: (parseFloat(box.getAttribute('data-x')) || 0),
                            y: (parseFloat(box.getAttribute('data-y')) || 0),
                            width: box.offsetWidth,
                            height: box.offsetHeight
                          }
                      
                          const collisionX = Math.max(self.x + self.width, other.x + other.width) - Math.min(self.x, other.x) < self.width + other.width;
                          const collisionY = Math.max(self.y + self.height, other.y + other.height) - Math.min(self.y, other.y) < self.height + other.height;
                      
                          if (collisionX && collisionY) {
                            return true;
                          }
                        }
                        return false;
                      }
                      
                      function computeSignerBoxPosition(signer) {
                        var $signatureBox = $(signer);
                        var sbDataX = parseFloat($signatureBox.attr('data-x'));
                        var sbDataY = parseFloat($signatureBox.attr('data-y'));
                        var sbOuterWidth = $signatureBox.outerWidth();
                        var sbOuterHeight = $signatureBox.outerHeight();
                      
                        var w = $('#pdf-page').width();
                        var h = $('#pdf-page').height();
                      
                        var top = sbDataX / w;
                        var left = sbDataY / h;
                        var width = sbOuterWidth / w;
                        var height = sbOuterHeight / h;
                      
                        document.getElementById("widthValue").value = width;
                        document.getElementById("heightValue").value = height;
                        document.getElementById("coorX").value = top;
                        document.getElementById("coorY").value = left;
                      }
                      @charset "UTF-8";
                      #pdf-container {
                        display: inline-block;
                        width: 100%;
                        user-select: none;
                      }
                      
                      #pdf-page {
                        width: 100%;
                      }
                      
                      .signer-box {
                        top: 0;
                        left: 0;
                        position: absolute;
                        background: #29e no-repeat 50% 50%;
                        background-size: 50%;
                        color: white;
                        font-size: 20px;
                        font-family: sans-serif;
                        border-radius: 8px;
                        width: 180px;
                        height: 150px;
                        opacity: 0.8;
                        box-sizing: border-box;
                        box-shadow: rgb(0, 0, 0, 0.7) 0.2em 0.2em 0.5em;
                        -ms-touch-action: none;
                        touch-action: none;
                      }
                      
                      #values {
                        position: fixed;
                        bottom: 0;
                        height: 40;
                      }
                      <!DOCTYPE html>
                      <html>
                      
                      <head></head>
                      
                      <body>
                        <div id="pdf-container">
                          <img id="pdf-page" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABMgAAAYwCAIAAAAI8uQFAAAzRklEQVR42uzdf2SV/f/A8Q8zySQxyUwykiTJSJLMjMncMhkzkyQxk1uSSJIkMZN8JJEkk0RmJkkkmUziNpNMYjLJJCZJMn1fevu+XZ+zH/dpq+67ejz+yDnvc/2uc7ue93XOdf7zGQAAABbhPw4BAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAA8JuG5X+Afw3/IQMAQFgCwhIAAGEJCEsAAISlsARhCQAA/0xYOojwD7x1vQcBABCWgLAEAEBYOqkFYQkAAMIShCUAAAhLEJYAACAsAe9BAACEJSAsAQAQlk5qQVgCAICwBGEJAADCEvAeBABAWALCEgAAYemkFoQlAAAISxCWAAAgLAHvQQAAhCUgLAEAEJZOakFYAgCAsARhCQAAwhLwHgQAQFgCwhIAAGHppBaEJQAAfPewHBwcPHjwYF1dXfUXa9eu7e7uvn79+s97sJ48efLnn3+uW7cu7dH69esPHToUg/4ZISwBABCW3/Gk9urVq2myZ8+e/RqH7P79+2mPbt++7R8QwhIAAL57WN65c+cXO/d99+5d2qO3b9/6B4SwBACA7x6W9+7d+1XDMh74B4SwBACAXzAsp6enhSXCEgAAft+wvHnz5o4dO1pbW9evX79p06ZLly4VX33w4EFbW9uqVavicVdXV0VFRUycX+3p6Ymn27dvj/HGxsbR0dE0PjQ01NnZuWLFivS4vr4+tqempubWrVsx8ubNmwMHDixZsiTmisk+fPiwgLBMG7Z79+54fOLEiWXLlsXSYktKvlna29vb0NDQ3t4ef3Z0dMQufP7yNdS9e/fGLp8+fTpNFnMdO3as9Yu8lm+7FwhLAAD4NcPy6NGj69atm5ycTE8jrmLGffv2pacRYFFuMVJdXR3xFjG2dOnS6KgUUfHSqVOncoNFYi1fvvz58+fXrl1Lc0Xs9ff3R31FicWUMRLTPH78uKmpKXqvr68vOjYGY8lfG5axtC1btsRIdGB3d3f0ZERmrC5GogMnJibSZBHJ0ZN5ObH9UZjp8eDgYEzc0tJSXNHatWtjMIoxHn/zvUBYAgDALxiWDx8+jMlu3LhRHEyZFFmVnkZDppRKIy9evEi/9nH58uWYsjjjnj17Ysr4Mx5/+vQpHkeFxsbkCVKn7dq1a2pqKo2MjY3FSJTt14bl5/+/R1FNTc3FixfTyPj4+MqVK2MwAjKNRDd2dnbmWaIYOzo68uOZYRlPc1h+871AWAIAwC8Ylo2NjTFZyWc4oxhjcP369enp9PR0PF2+fHnJvPX19Q0NDTcKIuGKU6ZrfcVZzpw5E4NXrlwp2a+qqqoFhGXazQi84pQXLlyIwcrKyvS1zwjFioqK9MnVPFf5Yflt9wJhCQAAv1pYfvz4MaIrGqxkPF1/CzFBXnV1dXVxmsi2mLepqal/hoGBgbmSLCVr/FmyX0uWLFlwWLa2thanTLkYXrx4kTszbN++vXjVcTFhueC9QFgCAMCvFpYjIyMxTfRhyXi6RBnGx8fnCsv379/nT73Os8E/PizD0qVLY/zx48fp6cWLF9N3L1Ne5p0SlghLAACE5cLDcmJiIurx7du3abJ8q5uSdc1zxTJeisG1a9f+C8MyZWTe+NSQx44di7Wk72SmbhSWCEsAAITlwsPy5MmT6cGqVatisr6+vpnRuHnz5uKqS8Iyz5s/+JodOnTonw3LioqKurq69Pj+/ft5fGxsLN30Nd2FaJ6wLJa2sERYAgDwO4Zlul3qXJM9fPgwt9+JEyfSB0SLE0SMldycJv2GR8lyDh8+nMYfPXqUB2/cuHH8+PFvnmRTU1NzhWVzc3NxyuHh4Rg8e/ZsetrR0VG8dHnr1q14Nd1FNvVzbW1tfnVycjKKNAYfPHggLBGWAAD81mEZdZcmK16vC69fv75w4UJkUrRlGvnw4cOGDRtKMmnnzp1NTU35afq5kcrKyk+fPhWX9ubNm5qamrSimGX//v2NjY1r1qxJP8KRsq3kzkDpRyBz9X3+/+9zVlRUpJu4ziVKL62omHwpLGMVL1++zIMtLS319fV5U+PpwYMH86vXr1+PdY2NjaWn6QLm6dOn375929fXt3fv3nSb3CNHjqQ7/XzbvUBYAgDATxCWw8PDPT09ufdmVfKh1snJyfT5z127dnV3d2/dujX+zD9AEmna0NAw141Vx8fHYzAveePGjenWOENDQ7G0NNjZ2Rkd++rVq97e3vQjk7F58ThGohLzZG1tbcUrn9mLFy/Onz+/bt26NFk8iHnTHV9TWMZKY5tjryMao4cjcWOP8uyx/KqqqtiF6MaI6qjo27dv51fv3r0br6Ylt7e3x17HoYiRrq6u0dHRb7gXCEsAAPhpwnLBJiYmBgcHI7rS9cav8vTp04GBgXwX1h8mf8dyeno6Aji2IV+KLGbz5y/froy9i4wsuej6+ctV3Hjp2bNnuczfv3/v3yjCEgAAYflbmOvmPSAsAQAQlk5qhSXCEgAAhOX3l25+u3PnTocCYQkAgLB0Uvt1pqen+/v7IynTLVvPnz8/MjLiHxbCEgAAYemk9iu8+1/5NrYgLAEAEJZOakFYAgCAsARhCQAAwhLwHgQAQFgCwhIAAGHppBaEJQAACEsQlgAAICwB70EAAIQlICwBABCWTmpBWAIAgLAEYQkAAMIShCUAAAhLwHsQAABhCQhLAACEpZNaEJYAACAsQVgCAICwBLwHAQAQloCwBABAWDqpBWEJAADCEoQlAAAIS8B7EAAAYQkISwAAhKWTWhCWAAAgLEFYAgCAsAS8BwEAEJaAsAQAQFg6qQVhCQAAwhKEJQAACEsQlt6DAAAIS8B7EAAAYVnO9NPT048ePbp79+6HDx/SyMuXLx39RXr9+vXp06cfPnz4023548ePOzs7R0ZG/CUKSwAAhGVZJ7UnTpyoqqpqampqbW2tra1taGi4cuXKtm3bHP0Fe/v27d69eysrK+P4X7t27afb/ra2ttjyaEt/lcISAABh+fcntdE/K1euHB0dzSNRlUuXLnU2vHgRZj9pWA4NDUVbPn782F+isAQAQFj+zUntkydPYoLe3t6S8Vu3bjkbXrzu7u6fNCwRlgAACMtyT2ovX74cE8SfM1/auHGjo79IUezCUlgKSwAAfvGwvHr1akywdu3aycnJkpcOHTr04/d2enr63/9XUv5GXrhw4TuF5U9xoISlsAQA4LcIy+fPn1dUVMQ0q1evfvDgQfGlV69elUx88+bNHTt2tLa2rl+/ftOmTZcuXSq+OjQ01NnZuWLFivS4vr4+FltTU3Pr1q0YefPmzYEDB5YsWRKri8nyvWeznp6eWPj27dtjgsbGxuJ3PmdazLrm34s4CG1tbatWrYrHXV1dsYSYeGEbOU9Yfo9tWOTxL5qamurt7V23bl3xUnbaqt27d3/+crenZcuWxaJiM549e1acN2ZsaGhob2+PPzs6OmL70/+/2Lt3b+zv6dOn02Qx17Fjx1q/ePfu3TffBWEJAAA/LizD2bNn85TRAy9evJh1sqNHj0Zp5AubUQUx/b59+9LTaKdIjhiJ3ujv748AiBg4depUjEQJPH78uKmpKZKjr68vOioGo0yKC495Y+JcFzHL8uXLI3pn3ZLFrGv+vYj+SUuurq6OuaKFli5dGhmTGuarNnKesPwe27DI41/yPxQOHz5cW1tb/Ix0LGrLli0xEh3Y3d0dPRmRGeuKkejAiYmJNFkUcvRkXlRsfPyLSo8HBwdj4paWluK61q5dG4NRjIv/JyQsAQDgnwzLz19uA5siIVRWVh45ciRfREoePnwYL924caM4mM7vczV9+vQpnkYF3bt3r1iMMbhr166pqak0MjY2FiNRVnmaqJdYVHHJe/bsiWniz7k2eGHrKmcvot9SyaSRyOwnT54sbCNnDcvvtw0LPv6z6urqKvny7Z07d9L1w4sXL6aR8fHxlStXxmAEZBqJbiz+QkkUY0dHR348MyzjaQ7Lb74LwhIAAH5oWIaJiYn29vY8S/TD/fv386uNjY0xWPLhw3Tjn/Xr1xdXGoFanObMmTMxGOFasm1VVVX5aX19fUNDw42C9Csdy5cvn38Hv3Zd5ezF9PT0rKte2EbODMvvug0LO/6zOn/+fElYRuylwJu5g5WVlek7nxGKFRUV6ZOrea7yw/Lb7oKwBACAHx2WyfDw8ObNm/Oly/Qzhh8/foxaiKclE6cLRyEmmKsKZr3rbLoclyMqFt7U1NQ/w8DAwFeF5fzr+qq9qK6uLk6z4I0sCcvvvQ0LOP5zmTljCsvW1tbiZCkXQ/oEddrfsH379uJVx8WE5YJ3QVgCAMAPCstZby6arlaFdM+YkZGReBxVM3PeNNn4+PiCq+D9+/d/+4HSbxKWX7UXJVG34I0sCcvvvQ0/PizD0qVLYzz9P4hw8eLF/LHqyMu8R8ISAAB+2bDs7+8fHh6eOd7T05MT6O3bt2k5+R4tJWtZzBXLmDf93sn3Dsuv2ouSqFvwRpaE5ffehn8kLFNG5i1PDXns2LFYRfpMdepGYQkAAL9yWJ49e3bmeLp/TL62tmrVqnja19c3M3U2b968yCpIC5/5mdL5f0hzAesqfy9Kom7BGznzO5bfdRv+kbCMfyR1dXXpcfF7uWNjY+mmr2n35wnLYmYLSwAA+CnDcvXq1SX3gA0vX76MGRsbG9PTEydOpE82FqeJiii5q8rCquDw4cPpVysePXqUB2/cuHH8+PFvG5bl70X6KcWihW3kuXPnSsLyu27DN6yyS5cuzRqWzc3NxcmGh4djMP+/iY6OjuKly1u3bsWr6S6yKZ5ra2vzq5OTk1GkMVj8AVVhCQAAP2VYpu9SFq8affr0adeuXXF+Pzo6mkY+fPiwYcOGkvP7nTt3NjU15aepHEruTJN+h7B4UTR9n7CioiJ/vfPNmzc1NTVpU2OZ+/fvj6Bds2ZN/nmJmRa2rnL2Il2qjSXHQSgufAEbGWKymP706dPF5X+nbVjw8Z9Vd3d3THby5MmSsIzlv3z5Mg+2tLTU19fn7YynBw8ezK9ev349VjQ2NpaepguYcTTevn3b19e3d+/edI/cI0eOpDv9fNtdEJYAAPDjwnL/F7W1tX/88ceBAwf27dtXV1e3adOm9NuJ2eTkZPrgYjRnVMfWrVvjz/yzGUNDQzGeVtfZ2fnw4cNXr1719vam3zmMHIrHMfLgwYM8WVtbW77yNj4+vn379rzBGzduzDd9mWkx65p/L+7fv9/Q0DDXfU2/aiOjec6dO1ddXR1TxobF49evX5dzJBe2DYs8/kVRicUtP3/+fOq3FJaxxtjgnp6eiMaI4ejb2J08byy8qqoqtj+68cKFC5HQt2/fzq/evXs3Xk1rb29vj12O4xAjXV1do6Oj33AXhCUAAPzQsJyYmMiXm0ZGRga+yBcqZ51+cHAwamH+K3UL8/Tp01h7vr/o97OYvfhWG/lv2Iavkr9jGZ0Z9RsbkC9FFv/vw+cv366MXYuMLLniGqKu46Vnz56lp8PDw+/fv/9l37rCEgCA3yQs4WvD0qHwHgQAQFiCsBSWAAAISye1/HB37txJNw1yKLwHAQAQlvB1pqen+/v7IynTLVvPnz8/MjLisHgPAgAgLOErvPtf+R62eA8CACAsAWEJAICwdFILwhIAAP49YTk0NPTnn3/W1dVVF+zfv//ixYufPn06fPhwc3Nz8aVt27bF4IsXL/w9jY+Pt7S05CNz7949x0RYCksAAH7HsEyuX7+e521rayt5taqqKr86OTn5O//dnDp16s2bN/npx48f85G5ffu2f7vCUlgCAPD7hmVEUZ53//79Ja/u2LHD6XJ4+vTpkiVLimFZPOzCEmEJAICwnDMsm5qanC5PTk7W1dXFERCWCEsAAITltw/Ljx8/3rt3Lxby/Pnzxez5u3fv7ty5MzQ0VOb0X7XeiYmJmPLly5dzTTA1NXXni1hsyUuvX7/euHFjOgLzh2Vay6tXrxa/gw8ePPBdVmEJAAC/fliOjo42Nzc3NDR0dnZWV1fHBDt27MhZ9d///ndJwcGDB9N4X19fbW3t0qVLL1y4kEbSjYKWL19+8uTJLVu21NXVPXr0aJ4Nnn+90YG7du3K6x0cHOzq6qqoqEi7cObMmZm9t2/fvpjgjz/+2L17d2VlZXd3dwymV4eHh2tqavIRSMuM5Zcc9oGBgbyW+DP2vbiKeXYwXtqzZ0/e2ps3b0b9btiwIZYTh2iRrY6wBABAWP6rw3JkZKSqqioSMT2NfkvTRDjlaaKm8rxRUHk8gvD48eP5aXRaTr7owwizFStWzHW9rpz1xrryemPKs2fPRsTmkWfPnhUX2NjYGIM7d+5MT9va2uLptm3b0gaPjY3lVYT+/v579+799ddfJYc9reXixYt5JGYsfwejIdNcly9fXrt2bV7InTt3vCWEJQAA/GRhWVdX1/6/Vq1aNeuSIw7T4KVLlz5/+SjpzIaMiKqsrEyD165dy/Nu2LAh32C2r68vTTA+Pp5G0hq7u7tn3dpy1ls8IL29vWkkB9v169fzZBFyJZPFdqaRnp6eNPLu3bu8tLk+CjtzLTdu3Ch/B5ctW5amWb169YMHD0ZHR+vr65ubm4t7hLAEAICfIywbGxtv/K/89cKSJZ84caLYVMX6yp8jDXv37k2D27ZtSyOPHz8+cOBAniDfdTaPpGukUV+zbm2Z6515W5186fXKlSt5ss2bN5fUZn9/fxqJ+i0/LOdZSzk7mMOypaXFe0BYAgDAzx2WX/Udy5hxYGDg85c7zTQ3N88aeH/99Vcej6SMkVhF/ihpyN9+zNdI83cap6en59rgv13vPMl3+fLlNBLLL37GdebRSDfyWVhY5rWUs4M5LPOVT4QlAAD8FmGZunHHjh3btm17+vTprIEXtm/fnsY7OjripZg+vxTllud6/fr1u/81zzb/7XrLSb5iMebJIllLFriYsCxzB3NY5g/QIiwBAOC3CMv0qdRNmza9f/9+ro+khlu3bqXxioqKw4cP9/X15ZeK1wzLv1FNOestJyyL1Zcnyx+F/SZXLMvcQWEpLAEA4HcMy97e3mILzROWEVerV69OL9XU1JR8wHXNmjXppfx7JMnU1NSsW1vmessJy7Bu3br8eyFp5ObNm2kkNiyNLPKjsOXsoLAUlgAA8CuHZfo1jplLzrc/PXfu3Ocvt+SZKyxDT09PeunkyZMlLx05ciS9VFlZ+eTJk9xynZ2ds25tmestMyxzpl69ejWNxIOSTf3w4UPJT5Xk38wsZy3l7KCwFJYAAPBzh2X+qGqYmXO5ecL79+/zeL7WF+Lx7t2789NTp07l0EqmpqaWLFkSZfX69euS5b9582blypVpxljX4cOHz549u3nz5pGRkVm3tpz1znpXnnzlsPgTmjFlfX19DMZy0kha4IYNG6In82T5iuvRo0evXLmSbrEz61rq6upK1lLODsbBmflTKAhLAAD4CcJybGwsGqm2tjbPG+0X5XPv3r2opqtXr7a0tBSXvHXr1siqdL0uEq6qqir99GL6aY38yyJ79uyZ+QOMXV1dHR0ds27G06dP169fn9cSC7x///5c2/y36412bW9vz0vbtGnTixcv8o+UpBmL3Ts5Odna2hrj+/bt279/fzyIp/lnNpPh4eHUpRUVFYcOHYqRctYyODj4tzsYG5xWmlM5z4WwBACAnyAsFymiqHgN8/OXT42mG97MFDk6MTExz9KePHkyMDAwNDQ016+MLGy9ZYrNG/wif8x1pnfv3s0M5vKVv4MISwAA+F3CEvAeBABAWALCEgAAYemkFoQlAAAISxCWAAAgLEFYeg8CACAsAWEJAICwdFILwhIAAGHppBaEJQAACEsQlgAAICwB70EAAIQlICwBABCWTmpBWAIAgLAEYQkAAMIS8B4EAEBYAsISAABh6aQWhCUAAAhLEJYAACAsAe9BAACEJSAsAQAQlk5qQVgCAICwBGEJAADCEvAeBABAWALCEgAAYemkFoQlAAAISxCWAAAgLEFYAgCAsAS8BwEAEJaAsAQAQFg6qQVhCQAAwhKEJQAACEvAexAAAGEJCEsAAISlk1oQlgAA8GPCEvhn+Q8ZAADCEhCWAAAIS0BYAgAgLIUlCEsAAPhxYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhKVDAAAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWDoEAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEpUMAAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAOD/2q9jAgAAAIBg/VsLYovgA2AsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwlAAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAABgLCUAAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAsBF9Ip71RRoBHwAAAABJRU5ErkJggg=="
                          />
                      
                      
                          <div id="signer-1" class="signer-box" data-x="379" data-y="279" style="position: absolute; transform: translate(379px, 279px); width: 148px; height: 90px; --content:&quot;Firma número 1&quot; ;"></div>
                          <div id="signer-2" class="signer-box" data-x="17" data-y="30" style="position: absolute; transform: translate(17px, 30px); width: 238px; height: 121px; --content:&quot;Firma número 2&quot; ;"></div>
                      
                        </div>
                        <div id="values">
                          <label>X:
                               <input id="coorX" readonly>
                               </label>
                          <label>Y:
                               <input id="coorY" readonly>
                               </label>
                          <label>Width:
                               <input id="widthValue" readonly>
                               </label>
                          <label>Height:
                               <input id="heightValue" readonly>
                               </label>
                        </div>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.worker.min.js'></script>
                      </body>
                      
                      </html>
                      window.dragMoveListener = dragMoveListener;
                      
                      interact('.signer-box')
                        .draggable({
                          onmove: dragMoveListener,
                          inertia: true,
                          autoScroll: true,
                          restrict: {
                            elementRect: {
                              top: 0,
                              left: 0,
                              bottom: 1,
                              right: 1
                            }
                          }
                        })
                        .resizable({
                          onmove: resizeMoveListener,
                          inertia: true,
                          edges: {
                            left: true,
                            right: true,
                            bottom: true,
                            top: true
                          }
                        })
                      
                      const boxes = document.getElementsByClassName("signer-box");
                      
                      function dragMoveListener(event) {
                      
                        const self = {
                          x: (parseFloat(event.target.getAttribute('data-x')) || 0) + event.dx,
                          y: (parseFloat(event.target.getAttribute('data-y')) || 0) + event.dy,
                          width: event.target.offsetWidth,
                          height: event.target.offsetHeight
                        };
                      
                        if (!collides(self, event)) {
                          var target = event.target;
                          var x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
                          var y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
                          target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
                          target.setAttribute('data-x', x);
                          target.setAttribute('data-y', y);
                      
                          computeSignerBoxPosition(event.target);
                        }
                      
                      }
                      
                      function resizeMoveListener(event) {
                      
                        const self = {
                          x: (parseFloat(event.target.getAttribute('data-x')) || 0) + event.deltaRect.left,
                          y: (parseFloat(event.target.getAttribute('data-y')) || 0) + event.deltaRect.top,
                          width: event.rect.width,
                          height: event.rect.height
                        }
                      
                        if (!collides(self, event)) {
                          var target = event.target;
                          var x = (parseFloat(target.getAttribute('data-x')) || 0);
                          var y = (parseFloat(target.getAttribute('data-y')) || 0);
                          x += event.deltaRect.left;
                          y += event.deltaRect.top;
                      
                          target.style.width = event.rect.width + 'px';
                          target.style.height = event.rect.height + 'px';
                          target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px,' + y + 'px)';
                          target.setAttribute('data-x', x);
                          target.setAttribute('data-y', y);
                      
                          computeSignerBoxPosition(event.target);
                        }
                      }
                      
                      function collides(self, event, tag = "") {
                        for (const box of boxes) {
                          if (box == event.target) {
                            continue;
                          }
                      
                          const other = {
                            x: (parseFloat(box.getAttribute('data-x')) || 0),
                            y: (parseFloat(box.getAttribute('data-y')) || 0),
                            width: box.offsetWidth,
                            height: box.offsetHeight
                          }
                      
                          const collisionX = Math.max(self.x + self.width, other.x + other.width) - Math.min(self.x, other.x) < self.width + other.width;
                          const collisionY = Math.max(self.y + self.height, other.y + other.height) - Math.min(self.y, other.y) < self.height + other.height;
                      
                          if (collisionX && collisionY) {
                            return true;
                          }
                        }
                        return false;
                      }
                      
                      function computeSignerBoxPosition(signer) {
                        var $signatureBox = $(signer);
                        var sbDataX = parseFloat($signatureBox.attr('data-x'));
                        var sbDataY = parseFloat($signatureBox.attr('data-y'));
                        var sbOuterWidth = $signatureBox.outerWidth();
                        var sbOuterHeight = $signatureBox.outerHeight();
                      
                        var w = $('#pdf-page').width();
                        var h = $('#pdf-page').height();
                      
                        var top = sbDataX / w;
                        var left = sbDataY / h;
                        var width = sbOuterWidth / w;
                        var height = sbOuterHeight / h;
                      
                        document.getElementById("widthValue").value = width;
                        document.getElementById("heightValue").value = height;
                        document.getElementById("coorX").value = top;
                        document.getElementById("coorY").value = left;
                      }
                      @charset "UTF-8";
                      #pdf-container {
                        display: inline-block;
                        width: 100%;
                        user-select: none;
                      }
                      
                      #pdf-page {
                        width: 100%;
                      }
                      
                      .signer-box {
                        top: 0;
                        left: 0;
                        position: absolute;
                        background: #29e no-repeat 50% 50%;
                        background-size: 50%;
                        color: white;
                        font-size: 20px;
                        font-family: sans-serif;
                        border-radius: 8px;
                        width: 180px;
                        height: 150px;
                        opacity: 0.8;
                        box-sizing: border-box;
                        box-shadow: rgb(0, 0, 0, 0.7) 0.2em 0.2em 0.5em;
                        -ms-touch-action: none;
                        touch-action: none;
                      }
                      
                      #values {
                        position: fixed;
                        bottom: 0;
                        height: 40;
                      }
                      <!DOCTYPE html>
                      <html>
                      
                      <head></head>
                      
                      <body>
                        <div id="pdf-container">
                          <img id="pdf-page" src="data:image/png;base64,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WAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhKVDAAAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWDoEAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEpUMAAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAOD/2q9jAgAAAIBg/VsLYovgA2AsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwlAAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAABgLCUAAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAsBF9Ip71RRoBHwAAAABJRU5ErkJggg=="
                          />
                      
                      
                          <div id="signer-1" class="signer-box" data-x="379" data-y="279" style="position: absolute; transform: translate(379px, 279px); width: 148px; height: 90px; --content:&quot;Firma número 1&quot; ;"></div>
                          <div id="signer-2" class="signer-box" data-x="17" data-y="30" style="position: absolute; transform: translate(17px, 30px); width: 238px; height: 121px; --content:&quot;Firma número 2&quot; ;"></div>
                      
                        </div>
                        <div id="values">
                          <label>X:
                               <input id="coorX" readonly>
                               </label>
                          <label>Y:
                               <input id="coorY" readonly>
                               </label>
                          <label>Width:
                               <input id="widthValue" readonly>
                               </label>
                          <label>Height:
                               <input id="heightValue" readonly>
                               </label>
                        </div>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.worker.min.js'></script>
                      </body>
                      
                      </html>
                      window.dragMoveListener = dragMoveListener;
                      
                      interact('.signer-box')
                        .draggable({
                          onmove: dragMoveListener,
                          inertia: true,
                          autoScroll: true,
                          restrict: {
                            elementRect: {
                              top: 0,
                              left: 0,
                              bottom: 1,
                              right: 1
                            }
                          }
                        })
                        .resizable({
                          onmove: resizeMoveListener,
                          inertia: true,
                          edges: {
                            left: true,
                            right: true,
                            bottom: true,
                            top: true
                          }
                        })
                      
                      const boxes = document.getElementsByClassName("signer-box");
                      
                      function dragMoveListener(event) {
                      
                        const self = {
                          x: (parseFloat(event.target.getAttribute('data-x')) || 0) + event.dx,
                          y: (parseFloat(event.target.getAttribute('data-y')) || 0) + event.dy,
                          width: event.target.offsetWidth,
                          height: event.target.offsetHeight
                        };
                      
                        if (!collides(self, event)) {
                          var target = event.target;
                          var x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
                          var y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
                          target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px, ' + y + 'px)';
                          target.setAttribute('data-x', x);
                          target.setAttribute('data-y', y);
                      
                          computeSignerBoxPosition(event.target);
                        }
                      
                      }
                      
                      function resizeMoveListener(event) {
                      
                        const self = {
                          x: (parseFloat(event.target.getAttribute('data-x')) || 0) + event.deltaRect.left,
                          y: (parseFloat(event.target.getAttribute('data-y')) || 0) + event.deltaRect.top,
                          width: event.rect.width,
                          height: event.rect.height
                        }
                      
                        if (!collides(self, event)) {
                          var target = event.target;
                          var x = (parseFloat(target.getAttribute('data-x')) || 0);
                          var y = (parseFloat(target.getAttribute('data-y')) || 0);
                          x += event.deltaRect.left;
                          y += event.deltaRect.top;
                      
                          target.style.width = event.rect.width + 'px';
                          target.style.height = event.rect.height + 'px';
                          target.style.webkitTransform = target.style.transform = 'translate(' + x + 'px,' + y + 'px)';
                          target.setAttribute('data-x', x);
                          target.setAttribute('data-y', y);
                      
                          computeSignerBoxPosition(event.target);
                        }
                      }
                      
                      function collides(self, event, tag = "") {
                        for (const box of boxes) {
                          if (box == event.target) {
                            continue;
                          }
                      
                          const other = {
                            x: (parseFloat(box.getAttribute('data-x')) || 0),
                            y: (parseFloat(box.getAttribute('data-y')) || 0),
                            width: box.offsetWidth,
                            height: box.offsetHeight
                          }
                      
                          const collisionX = Math.max(self.x + self.width, other.x + other.width) - Math.min(self.x, other.x) < self.width + other.width;
                          const collisionY = Math.max(self.y + self.height, other.y + other.height) - Math.min(self.y, other.y) < self.height + other.height;
                      
                          if (collisionX && collisionY) {
                            return true;
                          }
                        }
                        return false;
                      }
                      
                      function computeSignerBoxPosition(signer) {
                        var $signatureBox = $(signer);
                        var sbDataX = parseFloat($signatureBox.attr('data-x'));
                        var sbDataY = parseFloat($signatureBox.attr('data-y'));
                        var sbOuterWidth = $signatureBox.outerWidth();
                        var sbOuterHeight = $signatureBox.outerHeight();
                      
                        var w = $('#pdf-page').width();
                        var h = $('#pdf-page').height();
                      
                        var top = sbDataX / w;
                        var left = sbDataY / h;
                        var width = sbOuterWidth / w;
                        var height = sbOuterHeight / h;
                      
                        document.getElementById("widthValue").value = width;
                        document.getElementById("heightValue").value = height;
                        document.getElementById("coorX").value = top;
                        document.getElementById("coorY").value = left;
                      }
                      @charset "UTF-8";
                      #pdf-container {
                        display: inline-block;
                        width: 100%;
                        user-select: none;
                      }
                      
                      #pdf-page {
                        width: 100%;
                      }
                      
                      .signer-box {
                        top: 0;
                        left: 0;
                        position: absolute;
                        background: #29e no-repeat 50% 50%;
                        background-size: 50%;
                        color: white;
                        font-size: 20px;
                        font-family: sans-serif;
                        border-radius: 8px;
                        width: 180px;
                        height: 150px;
                        opacity: 0.8;
                        box-sizing: border-box;
                        box-shadow: rgb(0, 0, 0, 0.7) 0.2em 0.2em 0.5em;
                        -ms-touch-action: none;
                        touch-action: none;
                      }
                      
                      #values {
                        position: fixed;
                        bottom: 0;
                        height: 40;
                      }
                      <!DOCTYPE html>
                      <html>
                      
                      <head></head>
                      
                      <body>
                        <div id="pdf-container">
                          <img id="pdf-page" src="data:image/png;base64,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WAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhKVDAAAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWDoEAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAABAWAIAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAIQlAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAAMISAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAgLAEAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAAAQlgAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAAGEJAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEpUMAAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAgLAEAABAWAIAACAsAQAAEJYAAAAISwAAABCWAAAACEsAAACEJQAAAMISAAAAhCUAAADCEgAAAGEJAACAsAQAAABhCQAAgLAEAABAWAIAACAsAQAAQFgCAAAgLAEAABCWAAAACEsAAACEJQAAAAhLAAAAhCUAAADCEgAAAGEJAAAAwhIAAABhCQAAgLAEAABAWAIAAICwBAAAQFgCAAAgLAEAABCWAAAAICwBAAAQlgAAAAhLAAAAhCUAAAAISwAAAIQlAAAAwhIAAABhCQAAgLAEAAAAYQkAAICwBAAAQFgCAAAgLAEAAEBYAgAAICwBAAAQlgAAAAhLAAAAEJYAAAAISwAAAIQlAAAAwhIAAACEJQAAAMISAAAAYQkAAICwBAAAQFgCAACAsAQAAEBYAgAAICwBAAAQlgAAACAsAQAAEJYAAAAISwAAAIQlAAAACEsAAACEJQAAAMISAAAAYQkAAADCEgAAAGEJAACAsAQAAEBYAgAAICwBAOD/2q9jAgAAAIBg/VsLYovgA2AsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwlAAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAABgLCUAAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAwFgCAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAACMJQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAADGEgAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAYCwBAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAMJYAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAYCwBAADAWAIAAGAsAQAAMJYAAAAYSwAAADCWAAAAGEsAAACMJQAAAMYSAAAAjCUAAADGEgAAAGMJAACAsQQAAABjCQAAgLEEAADAWAIAAGAsAQAAMJYAAABgLAEAADCWAAAAGEsAAACMJQAAABhLAAAAjCUAAADGEgAAAGMJAAAAxhIAAABjCQAAgLEEAADAWAIAAICxBAAAwFgCAABgLAEAADCWAAAAGEsAAAAwlgAAABhLAAAAjCUAAADGEgAAAIwlAAAAxhIAAABjCQAAgLEEAAAAYwkAAICxBAAAwFgCAABgLAEAAMBYAgAAYCwBAAAwlgAAABhLAAAAjCUAAAAYSwAAAIwlAAAAxhIAAABjCQAAAMYSAAAAYwkAAICxBAAAwFgCAACAsQQAAMBYAgAAYCwBAAAwlgAAAGAsAQAAMJYAAAAYSwAAAIwlAAAAGEsAAACMJQAAAMYSAAAAYwkAAICxBAAAAGMJAACAsQQAAMBYAgAAsBF9Ip71RRoBHwAAAABJRU5ErkJggg=="
                          />
                      
                      
                          <div id="signer-1" class="signer-box" data-x="379" data-y="279" style="position: absolute; transform: translate(379px, 279px); width: 148px; height: 90px; --content:&quot;Firma número 1&quot; ;"></div>
                          <div id="signer-2" class="signer-box" data-x="17" data-y="30" style="position: absolute; transform: translate(17px, 30px); width: 238px; height: 121px; --content:&quot;Firma número 2&quot; ;"></div>
                      
                        </div>
                        <div id="values">
                          <label>X:
                               <input id="coorX" readonly>
                               </label>
                          <label>Y:
                               <input id="coorY" readonly>
                               </label>
                          <label>Width:
                               <input id="widthValue" readonly>
                               </label>
                          <label>Height:
                               <input id="heightValue" readonly>
                               </label>
                        </div>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/interact.js/1.2.9/interact.min.js'></script>
                        <script src='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.943/pdf.worker.min.js'></script>
                      </body>
                      
                      </html>

                      Webpack 5 issues with fonts getting Failed to decode &amp; OTS parsing error

                      copy iconCopydownload iconDownload
                        use: {
                          loader: 'file-loader',
                      
                              {
                                test: /\.eot(\?v=\d+.\d+.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'application/font-woff',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.[ot]tf(\?v=\d+.\d+.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'application/octet-stream',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'image/svg+xml',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.(jpe?g|png|gif|ico)$/i,
                                use: [
                                  {
                                    loader: 'file-loader',
                                    options: {
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                      
                              {
                                test: /\.(jpe?g|svg|png|gif|ico|eot|ttf|woff2?)(\?v=\d+\.\d+\.\d+)?$/i,
                                type: 'asset/resource',
                              },
                      
                        use: {
                          loader: 'file-loader',
                      
                              {
                                test: /\.eot(\?v=\d+.\d+.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'application/font-woff',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.[ot]tf(\?v=\d+.\d+.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'application/octet-stream',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'image/svg+xml',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.(jpe?g|png|gif|ico)$/i,
                                use: [
                                  {
                                    loader: 'file-loader',
                                    options: {
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                      
                              {
                                test: /\.(jpe?g|svg|png|gif|ico|eot|ttf|woff2?)(\?v=\d+\.\d+\.\d+)?$/i,
                                type: 'asset/resource',
                              },
                      
                        use: {
                          loader: 'file-loader',
                      
                              {
                                test: /\.eot(\?v=\d+.\d+.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'application/font-woff',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.[ot]tf(\?v=\d+.\d+.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'application/octet-stream',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
                                use: [
                                  {
                                    loader: 'url-loader',
                                    options: {
                                      limit: 10000,
                                      mimetype: 'image/svg+xml',
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                              {
                                test: /\.(jpe?g|png|gif|ico)$/i,
                                use: [
                                  {
                                    loader: 'file-loader',
                                    options: {
                                      name: '[name].[ext]',
                                    },
                                  },
                                ],
                              },
                      
                              {
                                test: /\.(jpe?g|svg|png|gif|ico|eot|ttf|woff2?)(\?v=\d+\.\d+\.\d+)?$/i,
                                type: 'asset/resource',
                              },
                      

                      Community Discussions

                      Trending Discussions on jquery
                      • Rails 7 - link_to with method :delete still performs GET request
                      • Data path &quot;&quot; must NOT have additional properties(extractCss) in Angular 13 while upgrading project
                      • CSS: How to don't reset onhover animation on every hover
                      • jQuery .append doesn't work with $(document).ready
                      • Jquery append text data with a line break
                      • Single File ASP.NET Core 5 web app does not load static resources
                      • How to add multiple slider support to a simple jquery slider?
                      • Bootstrap 5 dropdown not working on angular 12
                      • Rewrite jQuery easing easeInExpo function into plain javascript &amp; css
                      • how to restrict drag elements in interact.js
                      Trending Discussions on jquery

                      QUESTION

                      Rails 7 - link_to with method :delete still performs GET request

                      Asked 2022-Feb-10 at 18:02

                      I am trying to get this link to work, performing a DELETE request:

                      <%= link_to "Sign Out", destroy_user_session_path, method: :delete %>
                      

                      However when I click on it, my browser still performs a GET request (which fails for obvious reasons):

                      screenshot of browser network console

                      I have read on multiple other forum posts, that this might have something to do with jquery not being included. They mentioned you would need to un-comment a line in app/javascript/application.js, however mine is pretty empty:

                      // Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
                      import "@hotwired/turbo-rails"
                      import "controllers"
                      

                      These forum posts were also quite old, so I suspect something has changed in the meantime.

                      ANSWER

                      Answered 2021-Dec-25 at 22:28

                      As suggested here, the following will suffice:

                      <%= link_to "Sign Out", destroy_user_session_path, data: { "turbo-method": :delete } %>
                      

                      I have tested this in my project and it seems to work fine. Thanks also to @alexts, you basically figured this out too, however the comment on GitHub even eliminated the double-request.

                      Source https://stackoverflow.com/questions/70474422

                      Community Discussions, Code Snippets contain sources that include Stack Exchange Network

                      Vulnerabilities

                      No vulnerabilities reported

                      Install jquery

                      First, [clone the jQuery git repo](https://help.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository).

                      Support

                      For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .

                      DOWNLOAD this Library from

                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      Explore Related Topics

                      Share this Page

                      share link
                      Consider Popular Plugin Libraries
                      Try Top Libraries by jquery
                      Compare Plugin Libraries with Highest Support
                      Compare Plugin Libraries with Highest Quality
                      Compare Plugin Libraries with Highest Security
                      Compare Plugin Libraries with Permissive License
                      Compare Plugin Libraries with Highest Reuse
                      Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
                      over 430 million Knowledge Items
                      Find more libraries
                      Reuse Solution Kits and Libraries Curated by Popular Use Cases
                      Explore Kits

                      Save this library and start creating your kit

                      • © 2022 Open Weaver Inc.