From aba17dfc6debc0fa162f17a1b1958a7916b734eb Mon Sep 17 00:00:00 2001
From: Annisa Muzdalifa <Annisa Muzdalifa>
Date: Thu, 8 Feb 2018 09:29:05 +0700
Subject: [PATCH] add slider

---
 .../Backend/Block/Adminhtml/Debugger.php      |   34 +
 .../Adminhtml/Grid/Renderer/RewriteStatus.php |   28 +
 .../Block/Adminhtml/ModulesVersion.php        |  157 +
 .../Adminhtml/System/Config/Extensions.php    |   15 +
 .../Adminhtml/System/Config/Notification.php  |   23 +
 .../Backend/Controller/Adminhtml/Debugger.php |   41 +
 .../Controller/Adminhtml/Debugger/Modules.php |   39 +
 .../Adminhtml/Debugger/Rewrites.php           |   39 +
 .../Adminhtml/Debugger/Rewritesall.php        |   36 +
 .../Adminhtml/Debugger/Rewritescustom.php     |   36 +
 app/code/WeltPixel/Backend/Helper/Utility.php |   58 +
 app/code/WeltPixel/Backend/Model/Feed.php     |   53 +
 .../Debugger/Grid/Collection.php              |  244 ++
 app/code/WeltPixel/Backend/Model/Scanner.php  |  122 +
 ...edispatchAdminActionControllerObserver.php |   49 +
 app/code/WeltPixel/Backend/README.md          |   22 +
 app/code/WeltPixel/Backend/composer.json      |   22 +
 app/code/WeltPixel/Backend/etc/acl.xml        |   31 +
 .../Backend/etc/adminhtml/events.xml          |    6 +
 .../WeltPixel/Backend/etc/adminhtml/menu.xml  |   64 +
 .../Backend/etc/adminhtml/routes.xml          |    8 +
 .../Backend/etc/adminhtml/system.xml          |   24 +
 app/code/WeltPixel/Backend/etc/di.xml         |   11 +
 app/code/WeltPixel/Backend/etc/module.xml     |    8 +
 app/code/WeltPixel/Backend/i18n/en_US.csv     |   22 +
 app/code/WeltPixel/Backend/registration.php   |    7 +
 .../layout/adminhtml_system_config_edit.xml   |    6 +
 .../Backend/view/adminhtml/layout/default.xml |    8 +
 .../weltpixel_backend_debugger_modules.xml    |    9 +
 .../weltpixel_backend_debugger_rewrites.xml   |   54 +
 .../adminhtml/templates/helpcenter/init.phtml |   17 +
 .../view/adminhtml/templates/modules.phtml    |   66 +
 .../system/config/notification.phtml          |    4 +
 .../adminhtml/web/css/source/_module.less     |  152 +
 .../adminhtml/web/images/WeltPixel_logo.svg   |   23 +
 .../web/images/WeltPixel_logo_dark.svg        |   23 +
 .../view/adminhtml/web/jscolor/arrow.gif      |  Bin 0 -> 66 bytes
 .../view/adminhtml/web/jscolor/cross.gif      |  Bin 0 -> 83 bytes
 .../Backend/view/adminhtml/web/jscolor/hs.png |  Bin 0 -> 2684 bytes
 .../Backend/view/adminhtml/web/jscolor/hv.png |  Bin 0 -> 2865 bytes
 .../view/adminhtml/web/jscolor/jscolor.js     |  997 +++++
 .../Block/Adminhtml/Banner.php                |   27 +
 .../Block/Adminhtml/Banner/Edit.php           |  142 +
 .../Block/Adminhtml/Banner/Edit/Form.php      |   32 +
 .../Adminhtml/Banner/Edit/Tab/Banner.php      |  611 +++
 .../Block/Adminhtml/Banner/Edit/Tabs.php      |   25 +
 .../Block/Adminhtml/Banner/Grid.php           |  277 ++
 .../Banner/Helper/Renderer/Image.php          |   64 +
 .../Banner/Helper/Renderer/MobileImage.php    |   25 +
 .../Form/Renderer/Fieldset/Element.php        |   55 +
 .../Block/Adminhtml/Slider.php                |   27 +
 .../Block/Adminhtml/Slider/Edit.php           |  131 +
 .../Block/Adminhtml/Slider/Edit/Form.php      |   32 +
 .../Adminhtml/Slider/Edit/Tab/Banners.php     |  317 ++
 .../Block/Adminhtml/Slider/Edit/Tab/Form.php  |  661 ++++
 .../Edit/Tab/Helper/Renderer/EditBanner.php   |   59 +
 .../Block/Adminhtml/Slider/Edit/Tabs.php      |   22 +
 .../Block/Adminhtml/Slider/Grid.php           |  212 ++
 .../Config/SeparatorGeneralCarousel.php       |   25 +
 .../System/Config/SeparatorGeneralSlider.php  |   25 +
 .../System/Config/Separatorbreakpoint.php     |   33 +
 .../System/Config/Separatorslide.php          |   24 +
 .../Block/Adminhtml/Widget/UpgradeToPro.php   |   22 +
 .../Block/Product/ImageBuilder.php            |  100 +
 .../OwlCarouselSlider/Block/Slider/Custom.php |   64 +
 .../Block/Slider/Products.php                 |  510 +++
 .../Controller/Adminhtml/AbstractAction.php   |  142 +
 .../Controller/Adminhtml/Banner.php           |   56 +
 .../Controller/Adminhtml/Banner/Delete.php    |   33 +
 .../Controller/Adminhtml/Banner/Edit.php      |   51 +
 .../Controller/Adminhtml/Banner/ExportCsv.php |   30 +
 .../Adminhtml/Banner/ExportExcel.php          |   30 +
 .../Controller/Adminhtml/Banner/ExportXml.php |   30 +
 .../Controller/Adminhtml/Banner/Grid.php      |   23 +
 .../Controller/Adminhtml/Banner/Index.php     |   30 +
 .../Adminhtml/Banner/MassDelete.php           |   42 +
 .../Adminhtml/Banner/MassStatus.php           |   46 +
 .../Controller/Adminhtml/Banner/NewAction.php |   23 +
 .../Controller/Adminhtml/Banner/Save.php      |  120 +
 .../Controller/Adminhtml/Slider.php           |   25 +
 .../Controller/Adminhtml/Slider/Banners.php   |   27 +
 .../Adminhtml/Slider/BannersGrid.php          |   27 +
 .../Controller/Adminhtml/Slider/Delete.php    |   33 +
 .../Controller/Adminhtml/Slider/Edit.php      |   45 +
 .../Controller/Adminhtml/Slider/ExportCsv.php |   30 +
 .../Adminhtml/Slider/ExportExcel.php          |   30 +
 .../Controller/Adminhtml/Slider/ExportXml.php |   30 +
 .../Controller/Adminhtml/Slider/Grid.php      |   23 +
 .../Controller/Adminhtml/Slider/Index.php     |   32 +
 .../Adminhtml/Slider/MassDelete.php           |   43 +
 .../Adminhtml/Slider/MassStatus.php           |   47 +
 .../Controller/Adminhtml/Slider/NewAction.php |   23 +
 .../Controller/Adminhtml/Slider/Save.php      |   86 +
 .../OwlCarouselSlider/Helper/Custom.php       |  236 ++
 .../OwlCarouselSlider/Helper/Data.php         |   75 +
 .../OwlCarouselSlider/Helper/Products.php     |  160 +
 .../OwlCarouselSlider/Model/Banner.php        |  127 +
 .../Model/Config/Source/Categories.php        |   97 +
 .../Model/Config/Source/Sortby.php            |   48 +
 .../Model/Config/Source/Truefalse.php         |   42 +
 .../Model/Config/Source/WidgetCustom.php      |   61 +
 .../Model/Config/Source/WidgetProducts.php    |   24 +
 .../Model/ResourceModel/Banner.php            |   22 +
 .../Model/ResourceModel/Banner/Collection.php |   23 +
 .../Model/ResourceModel/Slider.php            |   22 +
 .../Model/ResourceModel/Slider/Collection.php |   23 +
 .../OwlCarouselSlider/Model/Slider.php        |   69 +
 .../OwlCarouselSlider/Model/Status.php        |   29 +
 .../WeltPixel/OwlCarouselSlider/README.md     |   25 +
 .../OwlCarouselSlider/Setup/InstallSchema.php |  357 ++
 .../OwlCarouselSlider/Setup/UpgradeSchema.php |   88 +
 .../WeltPixel/OwlCarouselSlider/composer.json |   29 +
 .../WeltPixel/OwlCarouselSlider/etc/acl.xml   |   28 +
 .../OwlCarouselSlider/etc/adminhtml/menu.xml  |   66 +
 .../etc/adminhtml/routes.xml                  |    9 +
 .../etc/adminhtml/system.xml                  | 1673 +++++++++
 .../OwlCarouselSlider/etc/config.xml          |  285 ++
 .../OwlCarouselSlider/etc/frontend/di.xml     |    4 +
 .../OwlCarouselSlider/etc/module.xml          |    8 +
 .../OwlCarouselSlider/etc/widget.xml          |   35 +
 .../OwlCarouselSlider/i18n/en_US.csv          |  165 +
 .../OwlCarouselSlider/registration.php        |    7 +
 .../layout/weltowlcarousel_banner_edit.xml    |   26 +
 .../layout/weltowlcarousel_banner_grid.xml    |    9 +
 .../layout/weltowlcarousel_banner_index.xml   |   23 +
 .../layout/weltowlcarousel_banner_new.xml     |    5 +
 .../layout/weltowlcarousel_index_index.xml    |   10 +
 .../layout/weltowlcarousel_slider_banners.xml |   16 +
 .../weltowlcarousel_slider_bannersgrid.xml    |    7 +
 .../layout/weltowlcarousel_slider_edit.xml    |   35 +
 .../layout/weltowlcarousel_slider_grid.xml    |    9 +
 .../layout/weltowlcarousel_slider_index.xml   |   23 +
 .../layout/weltowlcarousel_slider_new.xml     |    5 +
 .../form/renderer/fieldset/element.phtml      |   71 +
 .../web/images/custom_widget_slider.png       |  Bin 0 -> 710 bytes
 .../web/images/product_widget_slider.png      |  Bin 0 -> 829 bytes
 .../frontend/layout/catalog_product_view.xml  |   15 +
 .../frontend/layout/checkout_cart_index.xml   |   10 +
 .../view/frontend/layout/default.xml          |    7 +
 .../view/frontend/requirejs-config.js         |   16 +
 .../frontend/templates/product/image.phtml    |   21 +
 .../product/image_with_borders.phtml          |   26 +
 .../templates/product/list/items.phtml        |  409 ++
 .../frontend/templates/sliders/custom.phtml   |  223 ++
 .../frontend/templates/sliders/products.phtml |  221 ++
 .../view/frontend/web/css/animate.css         | 3340 +++++++++++++++++
 .../view/frontend/web/css/owl.carousel.css    |  553 +++
 .../view/frontend/web/css/owl.video.play.png  |  Bin 0 -> 4976 bytes
 .../view/frontend/web/css/source/_extend.less |   32 +
 .../view/frontend/web/css/source/_module.less |  679 ++++
 .../view/frontend/web/js/owl.carousel.js      | 3074 +++++++++++++++
 .../view/frontend/web/js/owl.config.js        |   74 +
 .../owlcarouselslider/images/e/_/e.png        |  Bin 0 -> 3703 bytes
 .../owlcarouselslider/images/i/m/images-9.jpg |  Bin 0 -> 13004 bytes
 .../owlcarouselslider/images/m/a/magento1.jpg |  Bin 0 -> 57882 bytes
 .../owlcarouselslider/images/m/a/magento2.jpg |  Bin 0 -> 66342 bytes
 156 files changed, 20013 insertions(+)
 create mode 100644 app/code/WeltPixel/Backend/Block/Adminhtml/Debugger.php
 create mode 100644 app/code/WeltPixel/Backend/Block/Adminhtml/Grid/Renderer/RewriteStatus.php
 create mode 100644 app/code/WeltPixel/Backend/Block/Adminhtml/ModulesVersion.php
 create mode 100644 app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Extensions.php
 create mode 100644 app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Notification.php
 create mode 100644 app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger.php
 create mode 100644 app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Modules.php
 create mode 100644 app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewrites.php
 create mode 100644 app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritesall.php
 create mode 100644 app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritescustom.php
 create mode 100644 app/code/WeltPixel/Backend/Helper/Utility.php
 create mode 100644 app/code/WeltPixel/Backend/Model/Feed.php
 create mode 100644 app/code/WeltPixel/Backend/Model/ResourceModel/Debugger/Grid/Collection.php
 create mode 100644 app/code/WeltPixel/Backend/Model/Scanner.php
 create mode 100644 app/code/WeltPixel/Backend/Observer/PredispatchAdminActionControllerObserver.php
 create mode 100644 app/code/WeltPixel/Backend/README.md
 create mode 100644 app/code/WeltPixel/Backend/composer.json
 create mode 100644 app/code/WeltPixel/Backend/etc/acl.xml
 create mode 100644 app/code/WeltPixel/Backend/etc/adminhtml/events.xml
 create mode 100644 app/code/WeltPixel/Backend/etc/adminhtml/menu.xml
 create mode 100644 app/code/WeltPixel/Backend/etc/adminhtml/routes.xml
 create mode 100644 app/code/WeltPixel/Backend/etc/adminhtml/system.xml
 create mode 100644 app/code/WeltPixel/Backend/etc/di.xml
 create mode 100644 app/code/WeltPixel/Backend/etc/module.xml
 create mode 100644 app/code/WeltPixel/Backend/i18n/en_US.csv
 create mode 100644 app/code/WeltPixel/Backend/registration.php
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/layout/adminhtml_system_config_edit.xml
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/layout/default.xml
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_modules.xml
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_rewrites.xml
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/templates/helpcenter/init.phtml
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/templates/modules.phtml
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/templates/system/config/notification.phtml
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/css/source/_module.less
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo.svg
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo_dark.svg
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/arrow.gif
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/cross.gif
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/hs.png
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/hv.png
 create mode 100644 app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/jscolor.js
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Form.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tab/Banner.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tabs.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Grid.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/Image.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/MobileImage.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Form/Renderer/Fieldset/Element.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Form.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Banners.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Form.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Helper/Renderer/EditBanner.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tabs.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Grid.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralCarousel.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralSlider.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorbreakpoint.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorslide.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Widget/UpgradeToPro.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Product/ImageBuilder.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Custom.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Products.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/AbstractAction.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Delete.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Edit.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportCsv.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportExcel.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportXml.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Grid.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Index.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassDelete.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassStatus.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/NewAction.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Save.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Banners.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/BannersGrid.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Delete.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Edit.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportCsv.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportExcel.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportXml.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Grid.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Index.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassDelete.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassStatus.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/NewAction.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Save.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Helper/Custom.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Helper/Data.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Helper/Products.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Banner.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Categories.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Sortby.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Truefalse.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetCustom.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetProducts.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner/Collection.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider/Collection.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Slider.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Model/Status.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/README.md
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Setup/InstallSchema.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/Setup/UpgradeSchema.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/composer.json
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/acl.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/menu.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/routes.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/system.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/config.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/frontend/di.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/module.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/etc/widget.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/i18n/en_US.csv
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/registration.php
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_edit.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_grid.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_index.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_new.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_index_index.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_banners.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_bannersgrid.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_edit.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_grid.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_index.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_new.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/templates/form/renderer/fieldset/element.phtml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/web/images/custom_widget_slider.png
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/web/images/product_widget_slider.png
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/catalog_product_view.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/checkout_cart_index.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/default.xml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/requirejs-config.js
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image.phtml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image_with_borders.phtml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/list/items.phtml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/custom.phtml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/products.phtml
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/animate.css
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/owl.carousel.css
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/owl.video.play.png
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_extend.less
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_module.less
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.carousel.js
 create mode 100644 app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.config.js
 create mode 100644 pub/media/weltpixel/owlcarouselslider/images/e/_/e.png
 create mode 100644 pub/media/weltpixel/owlcarouselslider/images/i/m/images-9.jpg
 create mode 100644 pub/media/weltpixel/owlcarouselslider/images/m/a/magento1.jpg
 create mode 100644 pub/media/weltpixel/owlcarouselslider/images/m/a/magento2.jpg

diff --git a/app/code/WeltPixel/Backend/Block/Adminhtml/Debugger.php b/app/code/WeltPixel/Backend/Block/Adminhtml/Debugger.php
new file mode 100644
index 000000000..bb9e166d9
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Block/Adminhtml/Debugger.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace WeltPixel\Backend\Block\Adminhtml;
+
+/**
+ * Class Debugger
+ * @package WeltPixel\Backend\Block\Adminhtml
+ */
+class Debugger extends  \Magento\Backend\Block\Widget\Grid\Container
+{
+    protected function _construct()
+    {
+        $this->_controller = 'weltpixelbackend_debugger';
+        $this->_blockGroup = 'WeltPixel_Backend';
+        parent::_construct();
+        $this->removeButton('add');
+        $this->addButton(
+            'only-custom',
+            [
+                'label' => __("Only Custom Modules"),
+                'onclick' => 'setLocation(\'' . $this->getUrl('*/*/rewritescustom') . '\')',
+                'class' => 'primary'
+            ]
+        );
+        $this->addButton(
+            'all-core',
+            [
+                'label' => __("All Magento Modules"),
+                'onclick' => 'setLocation(\'' . $this->getUrl('*/*/rewritesall') . '\')',
+                'class' => 'secondary'
+            ]
+        );
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Block/Adminhtml/Grid/Renderer/RewriteStatus.php b/app/code/WeltPixel/Backend/Block/Adminhtml/Grid/Renderer/RewriteStatus.php
new file mode 100644
index 000000000..d3ff0816c
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Block/Adminhtml/Grid/Renderer/RewriteStatus.php
@@ -0,0 +1,28 @@
+<?php
+namespace WeltPixel\Backend\Block\Adminhtml\Grid\Renderer;
+
+/**
+ * Class RewriteStatus
+ * @package WeltPixel\Backend\Block\Adminhtml\Grid\Renderer
+ */
+class RewriteStatus extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
+{
+
+    /**
+     * Prepare link to display in grid
+     *
+     * @param \Magento\Framework\DataObject $row
+     * @return string
+     */
+    public function render(\Magento\Framework\DataObject $row)
+    {
+        $statusClass = 'ok';
+        $statusMessage = __('OK');
+        if (!$row->getStatus()) {
+            $statusClass = 'nok';
+            $statusMessage = __('CHECK REWRITE');
+        }
+
+        return '<span class="rewrite-status rewrite-status-'.$statusClass.'">' . $statusMessage .'</span>';
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Block/Adminhtml/ModulesVersion.php b/app/code/WeltPixel/Backend/Block/Adminhtml/ModulesVersion.php
new file mode 100644
index 000000000..be256918e
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Block/Adminhtml/ModulesVersion.php
@@ -0,0 +1,157 @@
+<?php
+
+namespace WeltPixel\Backend\Block\Adminhtml;
+
+/**
+ * Class ModulesVersion
+ * @package WeltPixel\Backend\Block\Adminhtml
+ */
+class ModulesVersion extends  \Magento\Backend\Block\Template
+{
+    CONST MODULE_VERSIONS = 'https://www.weltpixel.com/weltpixel_extensions.json';
+
+    /**
+     * @var \Magento\Framework\App\DeploymentConfig
+     */
+    protected $deploymentConfig;
+
+    /**
+     * @var \Magento\Framework\Component\ComponentRegistrarInterface
+     */
+    protected $componentRegistrar;
+
+    /**
+     * @var \Magento\Framework\Filesystem\Directory\ReadFactory
+     */
+    protected $readFactory;
+
+    /**
+     * @var array
+     */
+    protected $latestVersions;
+
+    /**
+     * @param \Magento\Framework\App\DeploymentConfig $deploymentConfig
+     * @param \Magento\Framework\Component\ComponentRegistrarInterface $componentRegistrar
+     * @param \Magento\Framework\Filesystem\Directory\ReadFactory $readFactory
+     * @param \Magento\Backend\Block\Template\Context $context
+     * @param array $data
+     */
+    public function __construct(
+        \Magento\Framework\App\DeploymentConfig $deploymentConfig,
+        \Magento\Framework\Component\ComponentRegistrarInterface $componentRegistrar,
+        \Magento\Framework\Filesystem\Directory\ReadFactory $readFactory,
+        \Magento\Backend\Block\Template\Context $context,
+        array $data = [])
+    {
+        $this->deploymentConfig = $deploymentConfig;
+        $this->readFactory = $readFactory;
+        $this->componentRegistrar = $componentRegistrar;
+        $this->latestVersions = $this->getModulesLatestVersions();
+        parent::__construct($context, $data);
+    }
+
+    /**
+     * @return array
+     */
+    protected function getModulesLatestVersions() {
+        $curl = curl_init(self::MODULE_VERSIONS);
+
+        curl_setopt($curl, CURLOPT_HEADER, 0);
+        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+        $response = curl_exec($curl);
+
+        $latestVersions = json_decode($response, true);
+
+        return $latestVersions;
+    }
+
+
+    /**
+     * @return array
+     */
+    public function getModuleVersions() {
+        $this->getModulesLatestVersions();
+        $modules = $this->deploymentConfig->get('modules');
+
+        $moduleDetails = [];
+
+        foreach ($modules as $moduleName => $isEnabled) {
+            if (strpos($moduleName, 'WeltPixel_') !== false ) {
+                $moduleDetails[$moduleName]['enabled'] = $isEnabled;
+                $moduleDetails[$moduleName]['version'] = $this->getComposerVersion($moduleName, \Magento\Framework\Component\ComponentRegistrar::MODULE);
+                if (isset($this->latestVersions['modules'][$moduleName]['version']))  {
+                    $moduleDetails[$moduleName]['latest_version'] = $this->latestVersions['modules'][$moduleName]['version'];
+                    $moduleDetails[$moduleName]['theme_module'] = $this->latestVersions['modules'][$moduleName]['theme_module'];
+                } else {
+                    $moduleDetails[$moduleName]['latest_version'] = __('N/A');
+                    $moduleDetails[$moduleName]['theme_module'] = false;
+                }
+                /** Adding latest version comparison messages */
+                if ($moduleDetails[$moduleName]['version'] == $moduleDetails[$moduleName]['latest_version']) {
+                    $moduleDetails[$moduleName]['status_message'] = __('Up to Date');
+                    $moduleDetails[$moduleName]['status'] = true;
+                } else {
+                    $moduleDetails[$moduleName]['status_message'] = __('Update needed');
+                    $moduleDetails[$moduleName]['status'] = false;
+                }
+            }
+        }
+
+        return $moduleDetails;
+    }
+
+    /**
+     * @return array
+     */
+    public function getThemeVersions() {
+        $themeDetails = [];
+
+        $themes = [
+            'Pearl' => 'frontend/Pearl/weltpixel',
+            'Pearl custom' => 'frontend/Pearl/weltpixel_custom'
+        ];
+        foreach ($themes as $name => $theme) {
+            $themeVersion =  $this->getComposerVersion($theme, \Magento\Framework\Component\ComponentRegistrar::THEME);
+            if ($themeVersion != 'N/A') {
+                $themeDetails[$name]['version'] = $themeVersion;
+                if (isset($this->latestVersions['themes'][$name]))  {
+                    $themeDetails[$name]['latest_version'] = $this->latestVersions['themes'][$name];
+                } else {
+                    $themeDetails[$name]['latest_version'] = __('N/A');
+                }
+                /** Adding latest version comparison messages */
+                if ($themeDetails[$name]['version'] == $themeDetails[$name]['latest_version']) {
+                    $themeDetails[$name]['status_message'] = __('Up to Date');
+                    $themeDetails[$name]['status'] = true;
+                } else {
+                    $themeDetails[$name]['status_message'] = __('Update needed');
+                    $themeDetails[$name]['status'] = false;
+                }
+            }
+        }
+
+        return $themeDetails;
+    }
+
+    /**
+     * @param $moduleName
+     * @return string
+     */
+    protected function getComposerVersion($moduleName, $type) {
+        $path = $this->componentRegistrar->getPath(
+            $type,
+            $moduleName
+        );
+
+        if (!$path) {
+            return __('N/A');
+        }
+
+        $dirReader = $this->readFactory->create($path);
+        $composerJsonData = $dirReader->readFile('composer.json');
+        $data = json_decode($composerJsonData, true);
+        return $data['version'];
+
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Extensions.php b/app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Extensions.php
new file mode 100644
index 000000000..243596b4f
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Extensions.php
@@ -0,0 +1,15 @@
+<?php
+
+namespace WeltPixel\Backend\Block\Adminhtml\System\Config;
+
+/**
+ * Class Extensions
+ * @package WeltPixel\Backend\Block\Adminhtml\System\Config
+ */
+class Extensions extends \Magento\Config\Block\System\Config\Form\Fieldset
+{
+    public function render(\Magento\Framework\Data\Form\Element\AbstractElement $element)
+    {
+        return '<iframe id="weltpixel_store" width="100%" src="https://www.weltpixel.com/store/index.html?id=' . uniqid() .'" ></iframe>';
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Notification.php b/app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Notification.php
new file mode 100644
index 000000000..1181a19e3
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Block/Adminhtml/System/Config/Notification.php
@@ -0,0 +1,23 @@
+<?php
+namespace WeltPixel\Backend\Block\Adminhtml\System\Config;
+
+use Magento\Config\Block\System\Config\Form\Field;
+use Magento\Framework\Data\Form\Element\AbstractElement;
+
+/**
+ * Class Notification
+ * @package WeltPixel\Backend\Block\Adminhtml\System\Config
+ */
+class Notification extends Field
+{
+    protected $_template = 'WeltPixel_Backend::system/config/notification.phtml';
+
+    /**
+     * @param AbstractElement $element
+     * @return string
+     */
+    protected function _getElementHtml(AbstractElement $element)
+    {
+        return $this->_toHtml();
+    }
+}
\ No newline at end of file
diff --git a/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger.php b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger.php
new file mode 100644
index 000000000..a9b0f556d
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger.php
@@ -0,0 +1,41 @@
+<?php
+namespace WeltPixel\Backend\Controller\Adminhtml;
+
+abstract class Debugger extends \Magento\Backend\App\Action
+{
+    /**
+     * Authorization level of a basic admin session
+     *
+     * @see _isAllowed()
+     */
+    const ADMIN_RESOURCE = 'WeltPixel_Backend::WeltPixel_Debugger';
+
+    /**
+     * Core registry
+     *
+     * @var \Magento\Framework\Registry
+     */
+    protected $_coreRegistry;
+
+    /**
+     * @param \Magento\Backend\App\Action\Context $context
+     * @param \Magento\Framework\Registry $coreRegistry
+     */
+    public function __construct(\Magento\Backend\App\Action\Context $context, \Magento\Framework\Registry $coreRegistry)
+    {
+        $this->_coreRegistry = $coreRegistry;
+        parent::__construct($context);
+    }
+
+    /**
+     * Init page
+     *
+     * @param \Magento\Backend\Model\View\Result\Page $resultPage
+     * @return \Magento\Backend\Model\View\Result\Page
+     */
+    protected function initPage($resultPage)
+    {
+        $resultPage->setActiveMenu('WeltPixel_Backend::WeltPixel_Debugger');
+        return $resultPage;
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Modules.php b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Modules.php
new file mode 100644
index 000000000..20fcef138
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Modules.php
@@ -0,0 +1,39 @@
+<?php
+namespace WeltPixel\Backend\Controller\Adminhtml\Debugger;
+
+class Modules extends \WeltPixel\Backend\Controller\Adminhtml\Debugger
+{
+    const ADMIN_RESOURCE = 'WeltPixel_Backend::WeltPixel_Debugger_Modules';
+
+    /**
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    protected $resultPageFactory;
+
+    /**
+     * @param \Magento\Backend\App\Action\Context $context
+     * @param \Magento\Framework\Registry $coreRegistry
+     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
+     */
+    public function __construct(
+        \Magento\Backend\App\Action\Context $context,
+        \Magento\Framework\Registry $coreRegistry,
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
+    ) {
+        $this->resultPageFactory = $resultPageFactory;
+        parent::__construct($context, $coreRegistry);
+    }
+
+    /**
+     * Index action
+     *
+     * @return \Magento\Framework\Controller\ResultInterface
+     */
+    public function execute()
+    {
+        /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
+        $resultPage = $this->resultPageFactory->create();
+        $this->initPage($resultPage)->getConfig()->getTitle()->prepend(__('Modules'));
+        return $resultPage;
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewrites.php b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewrites.php
new file mode 100644
index 000000000..c4171be28
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewrites.php
@@ -0,0 +1,39 @@
+<?php
+namespace WeltPixel\Backend\Controller\Adminhtml\Debugger;
+
+class Rewrites extends \WeltPixel\Backend\Controller\Adminhtml\Debugger
+{
+    const ADMIN_RESOURCE = 'WeltPixel_Backend::WeltPixel_Debugger';
+
+    /**
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    protected $resultPageFactory;
+
+    /**
+     * @param \Magento\Backend\App\Action\Context $context
+     * @param \Magento\Framework\Registry $coreRegistry
+     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
+     */
+    public function __construct(
+        \Magento\Backend\App\Action\Context $context,
+        \Magento\Framework\Registry $coreRegistry,
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
+    ) {
+        $this->resultPageFactory = $resultPageFactory;
+        parent::__construct($context, $coreRegistry);
+    }
+
+    /**
+     * Index action
+     *
+     * @return \Magento\Framework\Controller\ResultInterface
+     */
+    public function execute()
+    {
+        /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
+        $resultPage = $this->resultPageFactory->create();
+        $this->initPage($resultPage)->getConfig()->getTitle()->prepend(__('Check Rewrites / Preferences'));
+        return $resultPage;
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritesall.php b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritesall.php
new file mode 100644
index 000000000..cee90105e
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritesall.php
@@ -0,0 +1,36 @@
+<?php
+namespace WeltPixel\Backend\Controller\Adminhtml\Debugger;
+
+class Rewritesall extends \WeltPixel\Backend\Controller\Adminhtml\Debugger\Rewrites
+{
+    /**
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    protected $resultPageFactory;
+
+    /**
+     * @param \Magento\Backend\App\Action\Context $context
+     * @param \Magento\Framework\Registry $coreRegistry
+     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
+     */
+    public function __construct(
+        \Magento\Backend\App\Action\Context $context,
+        \Magento\Framework\Registry $coreRegistry,
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
+    )
+    {
+        $this->resultPageFactory = $resultPageFactory;
+        parent::__construct($context, $coreRegistry, $resultPageFactory);
+    }
+
+    /**
+     * @return \Magento\Framework\Controller\ResultInterface
+     */
+    public function execute()
+    {
+        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        $this->_session->setDebuggerRewite(true);
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('*/*/rewrites');
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritescustom.php b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritescustom.php
new file mode 100644
index 000000000..eefed0aaa
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Controller/Adminhtml/Debugger/Rewritescustom.php
@@ -0,0 +1,36 @@
+<?php
+namespace WeltPixel\Backend\Controller\Adminhtml\Debugger;
+
+class Rewritescustom extends \WeltPixel\Backend\Controller\Adminhtml\Debugger\Rewrites
+{
+    /**
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    protected $resultPageFactory;
+
+    /**
+     * @param \Magento\Backend\App\Action\Context $context
+     * @param \Magento\Framework\Registry $coreRegistry
+     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
+     */
+    public function __construct(
+        \Magento\Backend\App\Action\Context $context,
+        \Magento\Framework\Registry $coreRegistry,
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory
+    )
+    {
+        $this->resultPageFactory = $resultPageFactory;
+        parent::__construct($context, $coreRegistry, $resultPageFactory);
+    }
+
+    /**
+     * @return \Magento\Framework\Controller\ResultInterface
+     */
+    public function execute()
+    {
+        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        $this->_session->setDebuggerRewite(false);
+        $resultRedirect = $this->resultRedirectFactory->create();
+        return $resultRedirect->setPath('*/*/rewrites');
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Helper/Utility.php b/app/code/WeltPixel/Backend/Helper/Utility.php
new file mode 100644
index 000000000..1bfc12608
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Helper/Utility.php
@@ -0,0 +1,58 @@
+<?php
+
+namespace WeltPixel\Backend\Helper;
+
+use Magento\Framework\View\Design\Theme\ThemeProviderInterface;
+
+/**
+ * @SuppressWarnings(PHPMD.TooManyFields)
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class Utility extends \Magento\Framework\App\Helper\AbstractHelper
+{
+
+    /** @var  ThemeProviderInterface */
+    protected $themeProvider;
+	
+	/**
+	 * Constructor
+	 *
+	 * @param \Magento\Framework\App\Helper\Context $context
+     * @param ThemeProviderInterface $themeProvider
+	 */
+	public function __construct(
+			\Magento\Framework\App\Helper\Context $context,
+            ThemeProviderInterface $themeProvider
+	) {
+		parent::__construct($context);
+		$this->themeProvider = $themeProvider;
+	}
+
+	public function isPearlThemeUsed($storeCode = null) {
+        $themeId = $this->scopeConfig->getValue(
+            \Magento\Framework\View\DesignInterface::XML_PATH_THEME_ID,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+            $storeCode
+        );
+
+        $theme = $this->themeProvider->getThemeById($themeId);
+        $isPearlTheme = $this->_validatePearlTheme($theme);
+        return $isPearlTheme;
+    }
+
+    /**
+     * @param \Magento\Theme\Model\Theme $theme
+     * @return bool
+     */
+    protected function _validatePearlTheme($theme) {
+        $pearlThemePath = 'Pearl/weltpixel';
+        do {
+            if ($theme->getThemePath() == $pearlThemePath) {
+                return true;
+            }
+            $theme = $theme->getParentTheme();
+        } while ($theme);
+
+        return false;
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Model/Feed.php b/app/code/WeltPixel/Backend/Model/Feed.php
new file mode 100644
index 000000000..32b8e30c5
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Model/Feed.php
@@ -0,0 +1,53 @@
+<?php
+namespace WeltPixel\Backend\Model;
+
+use Magento\Framework\Config\ConfigOptionsListConstants;
+
+/**
+ * WeltPixelAdmin Feed model
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class Feed extends \Magento\AdminNotification\Model\Feed
+{
+
+    const XML_FREQUENCY_PATH = 'system/adminnotification/frequency';
+
+    /**
+     * Feed url for WeltPixel Feed
+     *
+     * @var string
+     */
+    protected $_weltPixelFeedUrl = 'http://weltpixel.com/notifications.rss';
+
+    /**
+     * Retrieve feed url
+     *
+     * @return string
+     */
+    public function getFeedUrl()
+    {
+        return $this->_weltPixelFeedUrl;
+    }
+
+    /**
+     * Retrieve Last update time
+     *
+     * @return int
+     */
+    public function getLastUpdate()
+    {
+        return $this->_cacheManager->load('weltpixel_notifications_lastcheck');
+    }
+
+    /**
+     * Set last update time (now)
+     *
+     * @return $this
+     */
+    public function setLastUpdate()
+    {
+        $this->_cacheManager->save(time(), 'weltpixel_notifications_lastcheck');
+        return $this;
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Model/ResourceModel/Debugger/Grid/Collection.php b/app/code/WeltPixel/Backend/Model/ResourceModel/Debugger/Grid/Collection.php
new file mode 100644
index 000000000..b7712e755
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Model/ResourceModel/Debugger/Grid/Collection.php
@@ -0,0 +1,244 @@
+<?php
+namespace WeltPixel\Backend\Model\ResourceModel\Debugger\Grid;
+
+use Magento\Framework\Api\Search\SearchResultInterface;
+use Magento\Framework\Search\AggregationInterface;
+
+/**
+ * Class Collection
+ * @package WeltPixel\Bakcend\Model\ResourceModel\Debugger\Grid
+ */
+class Collection extends \Magento\Framework\Data\Collection implements SearchResultInterface
+{
+    /**
+     * @var AggregationInterface
+     */
+    protected $aggregations;
+
+    /**
+     * @var \WeltPixel\Backend\Model\Scanner
+     */
+    protected $scanner;
+
+    /**
+     * @var \Magento\Backend\Model\Session
+     */
+    protected $backendSession;
+
+
+    /**
+     * @param \Magento\Backend\Model\Session $backendSession
+     * @param \WeltPixel\Backend\Model\Scanner $scanner
+     * @param \Magento\Framework\DataObjectFactory $dataObjectFactory
+     * @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory
+     * @param \Psr\Log\LoggerInterface $logger
+     * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
+     * @param \Magento\Framework\Event\ManagerInterface $eventManager
+     * @param string $mainTable
+     * @param string $eventPrefix
+     * @param string $eventObject
+     * @param string $resourceModel
+     * @param string $model
+     *
+     * @SuppressWarnings(PHPMD.ExcessiveParameterList)
+     */
+    public function __construct(
+        \Magento\Backend\Model\Session $backendSession,
+        \WeltPixel\Backend\Model\Scanner $scanner,
+        \Magento\Framework\DataObjectFactory $dataObjectFactory,
+        \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
+        \Psr\Log\LoggerInterface $logger,
+        \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
+        \Magento\Framework\Event\ManagerInterface $eventManager,
+        $mainTable,
+        $eventPrefix,
+        $eventObject,
+        $resourceModel,
+        $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document'
+    )
+    {
+        parent::__construct(
+            $entityFactory,
+            $logger,
+            $fetchStrategy,
+            $eventManager,
+            null,
+            null
+        );
+
+        $this->_eventPrefix = $eventPrefix;
+        $this->_eventObject = $eventObject;
+        $this->_dataObjectFactory = $dataObjectFactory;
+        $this->scanner = $scanner;
+        $this->backendSession = $backendSession;
+    }
+
+    /**
+     * @var \Magento\Framework\DataObjectFactory
+     */
+    protected $_dataObjectFactory;
+
+    /**
+     * @return AggregationInterface
+     */
+    public function getAggregations()
+    {
+        return $this->aggregations;
+    }
+
+    /**
+     * @param AggregationInterface $aggregations
+     * @return $this
+     */
+    public function setAggregations($aggregations)
+    {
+        $this->aggregations = $aggregations;
+    }
+
+    /**
+     * Retrieve all ids for collection
+     * Backward compatibility with EAV collection
+     *
+     * @param int $limit
+     * @param int $offset
+     * @return array
+     */
+    public function getAllIds($limit = null, $offset = null)
+    {
+        return $this->getConnection()->fetchCol($this->_getAllIdsSelect($limit, $offset), $this->_bindParams);
+    }
+
+    /**
+     * Get search criteria.
+     *
+     * @return \Magento\Framework\Api\SearchCriteriaInterface|null
+     */
+    public function getSearchCriteria()
+    {
+        return null;
+    }
+
+    /**
+     * Set search criteria.
+     *
+     * @param \Magento\Framework\Api\SearchCriteriaInterface $searchCriteria
+     * @return $this
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function setSearchCriteria(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria = null)
+    {
+        return $this;
+    }
+
+    /**
+     * Get total count.
+     *
+     * @return int
+     */
+    public function getTotalCount()
+    {
+        return $this->getSize();
+    }
+
+    /**
+     * Set total count.
+     *
+     * @param int $totalCount
+     * @return $this
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function setTotalCount($totalCount)
+    {
+        return $this;
+    }
+
+    /**
+     * Set items list.
+     *
+     * @param \Magento\Framework\Api\ExtensibleDataInterface[] $items
+     * @return $this
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function setItems(array $items = null)
+    {
+        return $this;
+    }
+
+    /**
+     * @return \Magento\Framework\DataObject[]
+     */
+    public function getItems()
+    {
+        $this->_populateCollection();
+        return parent::getItems();
+    }
+
+    public function _populateCollection()
+    {
+        $rewritesOption = $this->backendSession->getDebuggerRewite(false);
+        $rewrites = $this->scanner->getRewrites($rewritesOption);
+
+        $searchKey = str_replace("\\\\\\\\", "\\", $this->scanner->getData('filterCondition'));
+
+        if ($searchKey) {
+            foreach ($rewrites as $key => $value) {
+                if (strpos(strtolower($key), strtolower($searchKey)) === false) {
+                    unset($rewrites[$key]);
+                }
+            }
+        }
+
+        foreach ($rewrites as $originalClass => $rewriteOptions) {
+            foreach ($rewriteOptions as $areaCode => $rewriteClasses) {
+                if (count($rewriteClasses) > 1) {
+                    $status = false;
+                } else {
+                    $status = true;
+                }
+
+                /**
+                 * Exceptions
+                 * Magento\Catalog\Block\Product\ImageBuilder class we rewrite in LazyLoading, OwlCarousel modules as well
+                 * these modules are sold as standalone ones, so we rewrite the class also in CategoryPage module
+                 * where we merge the functionalities from those 2 modules, in this case this rewite is marked as Ok,
+                 */
+                if (($originalClass == 'Magento\Catalog\Block\Product\ImageBuilder') &&
+                    ($areaCode == 'frontend') &&
+                    (count($rewriteClasses) == 3)
+                ) {
+                    $status = true;
+                }
+
+                foreach ($rewriteClasses as $key => $rewriteClass) {
+                    $item = $this->_dataObjectFactory->create();
+                    if ($key) {
+                        $item->setArea('');
+                        $item->setOriginalClass('');
+                    } else {
+                        $item->setArea($areaCode);
+                        $item->setOriginalClass($originalClass);
+                    }
+                    $item->setRewriteClass($rewriteClass);
+                    $item->setStatus($status);
+                    $this->addItem($item);
+                }
+            }
+        }
+    }
+
+    /**
+     * Filter applied only on the original_class column
+     *
+     * @param array|string $field
+     * @param array|int|string $condition
+     * @return $this
+     */
+    public function addFieldToFilter($field, $condition)
+    {
+        $conditionValue = substr($condition['like'], 2, -2);
+
+        $this->scanner->setData('filterCondition', $conditionValue);
+
+        return $this;
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Model/Scanner.php b/app/code/WeltPixel/Backend/Model/Scanner.php
new file mode 100644
index 000000000..4f3e4da5b
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Model/Scanner.php
@@ -0,0 +1,122 @@
+<?php
+
+namespace WeltPixel\Backend\Model;
+
+class Scanner extends \Magento\Framework\Model\AbstractModel
+{
+    /**
+     * @var \Magento\Framework\App\Config\FileResolver
+     */
+    protected $fileResolver;
+
+    /**
+     * @var \Magento\Framework\App\AreaList
+     */
+    protected $areaList;
+
+    /**
+     * Direct usage of \Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner
+     * caused error on compilation
+     * Argument 1 passed to Magento\\Setup\\Module\\Di\\Code\\Scanner\\ConfigurationScanner::__construct()
+     * must be an instance of Magento\\Framework\\App\\Config\\FileResolver,
+     * instance of Magento\\Framework\\ObjectManager\\ObjectManager given
+     *
+     * so FileResolver and AreaList injected directly insetad
+     *
+     * @param \Magento\Framework\Model\Context $context
+     * @param \Magento\Framework\Registry $registry
+     * @param \Magento\Framework\App\Config\FileResolver $fileResolver
+     * @param \Magento\Framework\App\AreaList $areaList
+     */
+    public function __construct(
+        \Magento\Framework\Model\Context $context,
+        \Magento\Framework\Registry $registry,
+        \Magento\Framework\App\Config\FileResolver $fileResolver,
+        \Magento\Framework\App\AreaList $areaList
+    )
+    {
+        parent::__construct($context, $registry);
+        $this->fileResolver = $fileResolver;
+        $this->areaList = $areaList;
+    }
+
+    /**
+     * \Magento\Setup\Module\Di\Code\Scanner\ConfigurationScanner scan usage,
+     * because the original class injection is causing error on compilation
+     *
+     * @param $fileName
+     * @return array
+     */
+    public function getScannedFiles($fileName) {
+        $files = [];
+        $areaCodes = array_merge(
+            ['primary', \Magento\Framework\App\Area::AREA_GLOBAL],
+            $this->areaList->getCodes()
+        );
+        foreach ($areaCodes as $area) {
+            $files = array_merge_recursive(
+                $files,
+                $this->fileResolver->get($fileName, $area)->toArray()
+            );
+        }
+        return array_keys($files);
+    }
+
+    /**
+     * @param bool $all
+     * @return array
+     */
+    public function getRewrites($all = false)
+    {
+        $diFiles = $this->getScannedFiles('di.xml');
+        $moduleFiles = $this->getScannedFiles('module.xml');
+
+        array_walk($moduleFiles, function (&$item) {
+            $item = str_replace('/module.xml', '', $item);
+        });
+
+        if (!$all) {
+            foreach ($diFiles as $key => $file) {
+                preg_match('/(.*\/etc)/', $file, $matches);
+                $resultKey = $matches[1];
+                if (!in_array($resultKey, $moduleFiles) ||
+                    (strpos($file, '/vendor/magento') !== false)
+                ) {
+                    unset($diFiles[$key]);
+                }
+            }
+        }
+
+        $rewrites = $this->_collectRewriteEntities($diFiles);
+        return $rewrites;
+
+    }
+
+    /**
+     * @param array $files
+     * @return array
+     */
+    protected function _collectRewriteEntities(array $files)
+    {
+        $rewrites = [];
+        foreach ($files as $fileName) {
+            $areaCode = 'global';
+            preg_match('/\/etc\/(.*)\/di.xml/', $fileName, $matches);
+            if (isset($matches[1])) {
+                $areaCode = $matches[1];
+            }
+            $dom = new \DOMDocument();
+            $dom->loadXML(file_get_contents($fileName));
+            $xpath = new \DOMXPath($dom);
+            /** @var $node \DOMNode */
+            foreach ($xpath->query('//preference') as $node) {
+                $originalClass = $node->getAttribute('for');
+                $rewriteClass = $node->getAttribute('type');
+
+                $rewrites[$originalClass][$areaCode][] = $rewriteClass;
+            }
+        }
+
+        return $rewrites;
+    }
+}
diff --git a/app/code/WeltPixel/Backend/Observer/PredispatchAdminActionControllerObserver.php b/app/code/WeltPixel/Backend/Observer/PredispatchAdminActionControllerObserver.php
new file mode 100644
index 000000000..eeb4a8d5b
--- /dev/null
+++ b/app/code/WeltPixel/Backend/Observer/PredispatchAdminActionControllerObserver.php
@@ -0,0 +1,49 @@
+<?php
+namespace WeltPixel\Backend\Observer;
+
+use Magento\Framework\Event\ObserverInterface;
+
+/**
+ * PredispatchAdminActionControllerObserver observer
+ *
+ */
+class PredispatchAdminActionControllerObserver implements ObserverInterface
+{
+    /**
+     * @var \WeltPixel\Backend\Model\FeedFactory
+     */
+    protected $_feedFactory;
+
+    /**
+     * @var \Magento\Backend\Model\Auth\Session
+     */
+    protected $_backendAuthSession;
+
+    /**
+     * @param \WeltPixel\Backend\Model\FeedFactory $feedFactory
+     * @param \Magento\Backend\Model\Auth\Session $backendAuthSession
+     */
+    public function __construct(
+        \WeltPixel\Backend\Model\FeedFactory $feedFactory,
+        \Magento\Backend\Model\Auth\Session $backendAuthSession
+    ) {
+        $this->_feedFactory = $feedFactory;
+        $this->_backendAuthSession = $backendAuthSession;
+    }
+
+    /**
+     * Predispath admin action controller
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function execute(\Magento\Framework\Event\Observer $observer)
+    {
+        if ($this->_backendAuthSession->isLoggedIn()) {
+            $feedModel = $this->_feedFactory->create();
+            /* @var $feedModel \WeltPixel\Backend\Model\Feed */
+            $feedModel->checkUpdate();
+        }
+    }
+}
diff --git a/app/code/WeltPixel/Backend/README.md b/app/code/WeltPixel/Backend/README.md
new file mode 100644
index 000000000..123e31ae7
--- /dev/null
+++ b/app/code/WeltPixel/Backend/README.md
@@ -0,0 +1,22 @@
+# m2-weltpixel-backend
+
+### Installation
+
+With composer:
+
+```sh
+$ composer config repositories.welpixel-m2-weltpixel-backend git git@github.com:rusdragos/m2-weltpixel-backend.git
+$ composer require weltpixel/m2-weltpixel-backend:dev-master
+```
+
+Manually:
+
+Copy the zip into app/code/WeltPixel/Backend directory
+
+
+#### After installation by either means, enable the extension by running following commands:
+
+```sh
+$ php bin/magento module:enable WeltPixel_Backend --clear-static-content
+$ php bin/magento setup:upgrade
+```
diff --git a/app/code/WeltPixel/Backend/composer.json b/app/code/WeltPixel/Backend/composer.json
new file mode 100644
index 000000000..dcde33ae7
--- /dev/null
+++ b/app/code/WeltPixel/Backend/composer.json
@@ -0,0 +1,22 @@
+{
+    "name": "weltpixel/m2-weltpixel-backend",
+    "description": "WeltPixel Backend Module",
+    "require": {
+        "php": "~5.6.5|7.0.2|7.0.4|~7.0.6|~7.1.0",
+        "magento/module-admin-notification": "100.*|101.*"
+    },
+    "type": "magento2-module",
+    "version": "1.5.8",
+    "license": [
+        "OSL-3.0",
+        "AFL-3.0"
+    ],
+    "autoload": {
+        "files": [
+            "registration.php"
+        ],
+        "psr-4": {
+            "WeltPixel\\Backend\\": ""
+        }
+    }
+}
diff --git a/app/code/WeltPixel/Backend/etc/acl.xml b/app/code/WeltPixel/Backend/etc/acl.xml
new file mode 100644
index 000000000..2eb0a5f2a
--- /dev/null
+++ b/app/code/WeltPixel/Backend/etc/acl.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
+    <acl>
+        <resources>
+            <resource id="Magento_Backend::admin" >
+                <resource id="WeltPixel_Backend::WeltPixel" title="WeltPixel" sortOrder="200" >
+                    <resource id="WeltPixel_Backend::WeltPixel_Documentation" title="WeltPixel Documentation" sortOrder="0" />
+                    <resource id="WeltPixel_Backend::WeltPixel_HelpCenter" title="WeltPixel HelpCenter" sortOrder="2" />
+                    <resource id="WeltPixel_Backend::WeltPixel_Debugger" title="WeltPixel Debugger" sortOrder="3" >
+                        <resource id="WeltPixel_Backend::WeltPixel_Debugger_Rewrites" title="Rewrites" sortOrder="1" />
+                        <resource id="WeltPixel_Backend::WeltPixel_Debugger_Modules" title="Extensions Version" sortOrder="5" />
+                    </resource>
+                    <resource id="WeltPixel_Backend::Pearl_Theme_Options" title="Pearl Theme Options" sortOrder="5" />
+                </resource>
+                <resource id="Magento_Backend::stores">
+                    <resource id="Magento_Backend::stores_settings">
+                        <resource id="Magento_Config::config">
+                            <resource id="WeltPixel_Backend::DocumentationSettings" title="WeltPixel DocumentationSettings" sortOrder="0" />
+                        </resource>
+                    </resource>
+                </resource>
+            </resource>
+        </resources>
+    </acl>
+</config>
\ No newline at end of file
diff --git a/app/code/WeltPixel/Backend/etc/adminhtml/events.xml b/app/code/WeltPixel/Backend/etc/adminhtml/events.xml
new file mode 100644
index 000000000..955a48e97
--- /dev/null
+++ b/app/code/WeltPixel/Backend/etc/adminhtml/events.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
+    <event name="controller_action_predispatch">
+        <observer name="weltpixel_backend" instance="WeltPixel\Backend\Observer\PredispatchAdminActionControllerObserver" />
+    </event>
+</config>
diff --git a/app/code/WeltPixel/Backend/etc/adminhtml/menu.xml b/app/code/WeltPixel/Backend/etc/adminhtml/menu.xml
new file mode 100644
index 000000000..fb0108a5c
--- /dev/null
+++ b/app/code/WeltPixel/Backend/etc/adminhtml/menu.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
+    <menu>
+        <add id="WeltPixel_Backend::WeltPixel" title="WeltPixel" module="WeltPixel_Backend" sortOrder="200" resource="WeltPixel_Backend::WeltPixel"/>
+        <add
+                id="WeltPixel_Backend::WeltPixel_Documentation"
+                title="WeltPixel Documentation"
+                module="WeltPixel_Backend"
+                action="adminhtml/system_config/edit/section/weltpixel_backend_config/"
+                sortOrder="0"
+                parent="WeltPixel_Backend::WeltPixel"
+                resource="WeltPixel_Backend::WeltPixel_Documentation"
+        />
+        <add
+                id="WeltPixel_Backend::WeltPixel_HelpCenter"
+                title="WeltPixel Help Center"
+                module="WeltPixel_Backend"
+                action="adminhtml/system_config/edit/section/weltpixel_backend_config/"
+                sortOrder="1"
+                parent="WeltPixel_Backend::WeltPixel"
+                resource="WeltPixel_Backend::WeltPixel_HelpCenter"
+        />
+        <add
+                id="WeltPixel_Backend::WeltPixel_Debugger"
+                title="WeltPixel Debugger"
+                module="WeltPixel_Backend"
+                sortOrder="2"
+                parent="WeltPixel_Backend::WeltPixel"
+                resource="WeltPixel_Backend::WeltPixel_Debugger"
+        />
+        <add
+                id="WeltPixel_Backend::WeltPixel_Debugger_Rewrites"
+                title="Rewrites"
+                module="WeltPixel_Backend"
+                action="weltpixel_backend/debugger/rewrites"
+                sortOrder="2"
+                parent="WeltPixel_Backend::WeltPixel_Debugger"
+                resource="WeltPixel_Backend::WeltPixel_Debugger_Rewrites"
+        />
+        <add
+                id="WeltPixel_Backend::WeltPixel_Debugger_Modules"
+                title="Extensions Version"
+                module="WeltPixel_Backend"
+                action="weltpixel_backend/debugger/modules"
+                sortOrder="5"
+                parent="WeltPixel_Backend::WeltPixel_Debugger"
+                resource="WeltPixel_Backend::WeltPixel_Debugger_Modules"
+        />
+        <add
+                id="WeltPixel_Backend::Pearl_Theme_Options"
+                title="Pearl Theme Options"
+                module="WeltPixel_Backend"
+                sortOrder="3"
+                parent="WeltPixel_Backend::WeltPixel"
+                resource="WeltPixel_Backend::Pearl_Theme_Options"
+        />
+    </menu>
+</config>
diff --git a/app/code/WeltPixel/Backend/etc/adminhtml/routes.xml b/app/code/WeltPixel/Backend/etc/adminhtml/routes.xml
new file mode 100644
index 000000000..989b7b1c5
--- /dev/null
+++ b/app/code/WeltPixel/Backend/etc/adminhtml/routes.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
+    <router id="admin">
+        <route id="weltpixel_backend" frontName="weltpixel_backend">
+            <module name="WeltPixel_Backend" />
+        </route>
+    </router>
+</config>
diff --git a/app/code/WeltPixel/Backend/etc/adminhtml/system.xml b/app/code/WeltPixel/Backend/etc/adminhtml/system.xml
new file mode 100644
index 000000000..a9ed2e778
--- /dev/null
+++ b/app/code/WeltPixel/Backend/etc/adminhtml/system.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
+    <system>
+        <tab id="weltpixel" translate="label" sortOrder="2000" class="weltpixel-tab">
+            <label>WeltPixel</label>
+        </tab>
+        <section id="weltpixel_backend_config" translate="label" type="text" sortOrder="0" showInDefault="1" showInWebsite="1" showInStore="1">
+            <label>WeltPixel Documentation</label>
+            <tab>weltpixel</tab>
+            <class>item-weltpixel-documentation</class>
+            <resource>WeltPixel_Backend::DocumentationSettings</resource>
+            <group id="recommended_solutions" translate="label" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Recommended Solutions:</label>
+                <frontend_model>WeltPixel\Backend\Block\Adminhtml\System\Config\Extensions</frontend_model>
+            </group>
+        </section>
+    </system>
+</config>
diff --git a/app/code/WeltPixel/Backend/etc/di.xml b/app/code/WeltPixel/Backend/etc/di.xml
new file mode 100644
index 000000000..9785d17d6
--- /dev/null
+++ b/app/code/WeltPixel/Backend/etc/di.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
+    <type name="WeltPixel\Backend\Model\ResourceModel\Debugger\Grid\Collection">
+        <arguments>
+            <argument name="mainTable" xsi:type="string">weltpixel_debugger</argument>
+            <argument name="eventPrefix" xsi:type="string">weltpixel_debugger_grid_collection</argument>
+            <argument name="eventObject" xsi:type="string">weltpixel_debugger_grid_collection</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Framework\DataObject </argument>
+        </arguments>
+    </type>
+</config>
diff --git a/app/code/WeltPixel/Backend/etc/module.xml b/app/code/WeltPixel/Backend/etc/module.xml
new file mode 100644
index 000000000..7cdea3a17
--- /dev/null
+++ b/app/code/WeltPixel/Backend/etc/module.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
+    <module name="WeltPixel_Backend" setup_version="1.0.3">
+        <sequence>
+            <module name="Magento_AdminNotification"/>
+        </sequence>
+    </module>
+</config>
diff --git a/app/code/WeltPixel/Backend/i18n/en_US.csv b/app/code/WeltPixel/Backend/i18n/en_US.csv
new file mode 100644
index 000000000..44d6911f3
--- /dev/null
+++ b/app/code/WeltPixel/Backend/i18n/en_US.csv
@@ -0,0 +1,22 @@
+"Only Custom Modules","Only Custom Modules"
+"All Magento Modules","All Magento Modules"
+OK,OK
+"CHECK REWRITE","CHECK REWRITE"
+N/A,N/A
+"Up to Date","Up to Date"
+"Update needed","Update needed"
+Modules,Modules
+"Check Rewrites / Preferences","Check Rewrites / Preferences"
+Name,Name
+Enabled,Enabled
+"Current Version","Current Version"
+"Latest Version","Latest Version"
+"Theme module","Theme module"
+Themes,Themes
+WeltPixel,WeltPixel
+"WeltPixel Documentation","WeltPixel Documentation"
+"Recommended Solutions:","Recommended Solutions:"
+Area,Area
+"Original Class","Original Class"
+"Rewrite Class","Rewrite Class"
+Status,Status
diff --git a/app/code/WeltPixel/Backend/registration.php b/app/code/WeltPixel/Backend/registration.php
new file mode 100644
index 000000000..dc7d59ef4
--- /dev/null
+++ b/app/code/WeltPixel/Backend/registration.php
@@ -0,0 +1,7 @@
+<?php
+
+\Magento\Framework\Component\ComponentRegistrar::register(
+    \Magento\Framework\Component\ComponentRegistrar::MODULE,
+    'WeltPixel_Backend',
+    __DIR__
+);
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/layout/adminhtml_system_config_edit.xml b/app/code/WeltPixel/Backend/view/adminhtml/layout/adminhtml_system_config_edit.xml
new file mode 100644
index 000000000..c2616afcd
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/layout/adminhtml_system_config_edit.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <head>
+        <link src="WeltPixel_Backend::jscolor/jscolor.js"/>
+    </head>
+</page>
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/layout/default.xml b/app/code/WeltPixel/Backend/view/adminhtml/layout/default.xml
new file mode 100644
index 000000000..8897410c1
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/layout/default.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+<body>
+    <referenceContainer name="before.body.end">
+        <block class="Magento\Backend\Block\Template" template="WeltPixel_Backend::helpcenter/init.phtml"/>
+    </referenceContainer>
+</body>
+</page>
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_modules.xml b/app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_modules.xml
new file mode 100644
index 000000000..4572f9d52
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_modules.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <update handle="styles"/>
+    <body>
+        <referenceContainer name="content">
+            <block class="WeltPixel\Backend\Block\Adminhtml\ModulesVersion" name="weltpixel_rewrites_modulesversion" template="WeltPixel_Backend::modules.phtml" />
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_rewrites.xml b/app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_rewrites.xml
new file mode 100644
index 000000000..6301aaccb
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/layout/weltpixel_backend_debugger_rewrites.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <update handle="styles"/>
+    <body>
+        <referenceContainer name="content">
+            <block class="WeltPixel\Backend\Block\Adminhtml\Debugger" name="weltpixel_rewrites_grid">
+                <block class="Magento\Backend\Block\Widget\Grid" name="weltpixel_rewrites_grid.grid" as="grid">
+                    <arguments>
+                        <argument name="dataSource" xsi:type="object">WeltPixel\Backend\Model\ResourceModel\Debugger\Grid\Collection</argument>
+                        <argument name="pager_visibility" xsi:type="string">0</argument>
+                    </arguments>
+                    <block class="Magento\Backend\Block\Widget\Grid\ColumnSet" name="weltpixel_rewrites_grid.grid.columnSet" as="grid.columnSet">
+                        <arguments>
+                            <argument name="filter_visibility" xsi:type="string">1</argument>
+                        </arguments>
+                        <block class="Magento\Backend\Block\Widget\Grid\Column" as="area">
+                            <arguments>
+                                <argument name="header" xsi:type="string" translate="true">Area</argument>
+                                <argument name="index" xsi:type="string">area</argument>
+                                <argument name="sortable" xsi:type="string">0</argument>
+                                <argument name="filter" xsi:type="string">0</argument>
+                            </arguments>
+                        </block>
+                        <block class="Magento\Backend\Block\Widget\Grid\Column" as="original_class">
+                            <arguments>
+                                <argument name="header" xsi:type="string" translate="true">Original Class</argument>
+                                <argument name="index" xsi:type="string">original_class</argument>
+                                <argument name="sortable" xsi:type="string">0</argument>
+                                <!--<argument name="filter" xsi:type="string">0</argument>-->
+                            </arguments>
+                        </block>
+                        <block class="Magento\Backend\Block\Widget\Grid\Column" as="rewrite_class">
+                            <arguments>
+                                <argument name="header" xsi:type="string" translate="true">Rewrite Class</argument>
+                                <argument name="index" xsi:type="string">rewrite_class</argument>
+                                <argument name="sortable" xsi:type="string">0</argument>
+                                <argument name="filter" xsi:type="string">0</argument>
+                            </arguments>
+                        </block>
+                        <block class="Magento\Backend\Block\Widget\Grid\Column" as="status">
+                            <arguments>
+                                <argument name="header" xsi:type="string" translate="true">Status</argument>
+                                <argument name="filter" xsi:type="string">0</argument>
+                                <argument name="sortable" xsi:type="string">0</argument>
+                                <argument name="renderer" xsi:type="string">WeltPixel\Backend\Block\Adminhtml\Grid\Renderer\RewriteStatus</argument>
+                                <argument name="header_css_class" xsi:type="string">col-rewrite-status</argument>
+                            </arguments>
+                        </block>
+                    </block>
+                </block>
+            </block>
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/templates/helpcenter/init.phtml b/app/code/WeltPixel/Backend/view/adminhtml/templates/helpcenter/init.phtml
new file mode 100644
index 000000000..a7bc5caad
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/templates/helpcenter/init.phtml
@@ -0,0 +1,17 @@
+<!-- Start of weltpixelhelp Zendesk Widget script -->
+<script>/*<![CDATA[*/window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(e){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var e=this.createElement("script");n&&(this.domain=n),e.id="js-iframe-async",e.src="https://assets.zendesk.com/embeddable_framework/main.js",this.t=+new Date,this.zendeskHost="weltpixelhelp.zendesk.com",this.zEQueue=a,this.body.appendChild(e)},o.write('<body onload="document._l();">'),o.close()}();
+    /*]]>*/</script>
+<!-- End of weltpixelhelp Zendesk Widget script -->
+<script>
+    requirejs(['jquery' ],
+        function   ($) {
+            $(document).ready(function() {
+                $('.item-weltpixel-helpcenter a').bind('click', function() {
+                    $('iframe#launcher').contents().find('.src-component-Launcher-wrapper').trigger( "click" );
+                    $('iframe#launcher').show();
+                    $('.action-close').click();
+                    return false;
+                });
+            });
+        });
+</script>
\ No newline at end of file
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/templates/modules.phtml b/app/code/WeltPixel/Backend/view/adminhtml/templates/modules.phtml
new file mode 100644
index 000000000..f82addc55
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/templates/modules.phtml
@@ -0,0 +1,66 @@
+<?php
+$modules = $this->getModuleVersions();
+$themes = $this->getThemeVersions();
+?>
+<div class="admin__page-section-item">
+    <div class="admin__page-section-item-content">
+        <table class="admin__table-secondary">
+            <thead>
+                <tr>
+                    <th><?php echo __('Name'); ?></th>
+                    <th><?php echo __('Enabled'); ?></th>
+                    <th><?php echo __('Current Version'); ?></th>
+                    <th><?php echo __('Latest Version'); ?></th>
+                    <th></th>
+                </tr>
+            </thead>
+            <tbody>
+            <?php foreach ($modules as $moduleName => $options) : ?>
+                <tr>
+                    <td>
+                        <span class="module-title"><?php echo $moduleName ?></span>
+                        <?php if ($options['theme_module']) : ?>
+                            <span class="module-theme-info">(<?php echo __('Theme module'); ?>)</span>
+                        <?php endif; ?>
+                    </td>
+                    <td><?php echo ($options['enabled']) ? 'Yes' : 'No' ?></td>
+                    <td><?php echo $options['version'] ?></td>
+                    <td><?php echo $options['latest_version'] ?></td>
+                    <td><span class="rewrite-status rewrite-status-<?php echo ($options['status']) ? 'ok' : 'nok'; ?>"><?php echo $options['status_message'] ?></span></td>
+                </tr>
+            <?php endforeach; ?>
+            </tbody>
+        </table>
+    </div>
+</div>
+<?php if (count($themes)) :  ?>
+<hr/><br/>
+<div class="admin__page-section-item">
+    <div class="admin__page-section-item-title">
+        <h1 class="page-title"><?php echo __('Themes'); ?></h1>
+    </div>
+    <div class="admin__page-section-item-content">
+        <table class="admin__table-secondary">
+            <thead>
+            <tr>
+                <th><?php echo __('Name'); ?></th>
+                <th><?php echo __('Current Version'); ?></th>
+                <th><?php echo __('Latest Version'); ?></th>
+                <th></th>
+            </tr>
+            </thead>
+            <tbody>
+            <?php foreach ($themes as $themeName => $options) : ?>
+                <tr>
+                    <td><span class="module-title"><?php echo $themeName ?></span></td>
+                    <td><?php echo $options['version'] ?></td>
+                    <td><?php echo $options['latest_version'] ?></td>
+                    <td><span class="rewrite-status rewrite-status-<?php echo ($options['status']) ? 'ok' : 'nok'; ?>"><?php echo $options['status_message'] ?></span></td>
+
+                </tr>
+            <?php endforeach; ?>
+            </tbody>
+        </table>
+    </div>
+</div>
+<?php endif; ?>
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/templates/system/config/notification.phtml b/app/code/WeltPixel/Backend/view/adminhtml/templates/system/config/notification.phtml
new file mode 100644
index 000000000..44103766e
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/templates/system/config/notification.phtml
@@ -0,0 +1,4 @@
+<div>
+    <p>1. After changing theme settings make sure to clear related caches: Regenerate Pearl Theme CSS, Flush Magento Cache, Clear Browser Cache (if necessary also Flush JS/CSS Cache, Flush Catalog Images Files, Flush Cache Storage)</p>
+    <p>2. Make sure you are changing the settings on the right store view, settings may be different in default config vs. storeview</p>
+</div>
\ No newline at end of file
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/css/source/_module.less b/app/code/WeltPixel/Backend/view/adminhtml/web/css/source/_module.less
new file mode 100644
index 000000000..62675b1d3
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/web/css/source/_module.less
@@ -0,0 +1,152 @@
+@weltpixel_store_color: #FFF;
+
+#nav {
+    li.item-weltpixel {
+        > a {
+            &:before {
+                content: '';
+                background-image: url("../WeltPixel_Backend/images/WeltPixel_logo.svg");
+                background-repeat: no-repeat;
+                background-size: 70px;
+                background-position: center;
+                height: 50px;
+            }
+            > span {
+                font-size: 0px;
+            }
+        }
+        .submenu {
+            .submenu-title {
+                background-image: url("../WeltPixel_Backend/images/WeltPixel_logo.svg");
+                background-repeat: no-repeat;
+                padding-left: 80px;
+                height: 80px;
+                font-size: 0px;
+                margin-bottom: 15px;
+                background-size: 120px;
+            }
+            .item-weltpixel-documentation {
+                a {
+                    &:after {
+                        content: '\e60d';
+                        font-family: 'Admin Icons';
+                        margin-left: 10px;
+                    }
+                }
+            }
+            .item-weltpixel-helpcenter {
+                a {
+                    &:after {
+                        content: '\e633';
+                        font-family: 'Admin Icons';
+                        margin-left: 10px;
+                    }
+                }
+            }
+            .item-weltpixel-debugger {
+                .submenu-group-title {
+                    &:after {
+                        content: '\e613';
+                        font-family: 'Admin Icons';
+                        margin-left: 10px;
+                        color: #FFF;
+                    }
+                }
+            }
+            .item-pearl-theme-options {
+                display: none;
+                &.parent {
+                    display: block
+                }
+            }
+        }
+    }
+}
+
+.config-nav {
+    .item-weltpixel-documentation {
+        a {
+            &:after {
+                content: '\e60d';
+                font-family: 'Admin Icons';
+                margin-left: 10px;
+            }
+        }
+    }
+
+    .weltpixel-tab {
+        .admin__page-nav-title {
+            strong {margin-left: 50px;}
+            &:before {
+                content: '';
+                background-image: url("../WeltPixel_Backend/images/WeltPixel_logo_dark.svg");
+                background-repeat: no-repeat;
+                background-size: 40px;
+                background-position: 0px 0px;
+                height: 30px;
+                position: absolute;
+                width: 50px;
+                top: 14px;
+            }
+        }
+    }
+}
+
+#weltpixel_store {
+    border: none;
+    height: 1500px;
+}
+
+.section-config {
+    &.weltpixel-recommended-header {
+        .admin__collapsible-block {
+            display: block !important;
+            a {
+                font-weight: normal;
+                text-transform: uppercase;
+                &:before {
+                    content: '' !important;
+                }
+            }
+            table {
+                td.label {
+                    display: none;
+                }
+                td.value {
+                    width: 100%;
+                }
+            }
+        }
+    }
+}
+
+iframe#launcher {
+    display: none !important;
+}
+
+.col-rewrite-status {width: 160px;}
+.rewrite-status {
+    width: 100%;
+    display: block;
+    text-align: center;
+    padding: 5px;
+    font-weight: bold;
+    -webkit-border-radius: 10px;
+    -moz-border-radius: 10px;
+    border-radius: 10px;
+    color: #FFF;
+}
+.rewrite-status-nok {
+    background-color: #ff0000;
+}
+.rewrite-status-ok {
+    background-color: #00aa00;
+}
+.module-title {
+    font-size: 16px;
+}
+.module-theme-info {
+    font-size: 12px;
+    font-style: italic;
+    font-weight: bold;
+}
\ No newline at end of file
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo.svg b/app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo.svg
new file mode 100644
index 000000000..4d2109732
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="69px" height="42px" viewBox="0 0 69 42" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
+    <title>logo_white</title>
+    <desc>Created with Sketch.</desc>
+    <defs></defs>
+    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="weltpixel_homepage-2" transform="translate(-80.000000, -14.000000)" fill="#FFFFFF">
+            <g id="1_header">
+                <g id="menu">
+                    <g id="logo_white" transform="translate(80.000000, 14.000000)">
+                        <path d="M68.3067033,29.10096 C67.5730033,29.2078691 66.9842033,29.2613236 66.5334033,29.2613236 C65.9369367,29.2613236 65.47847,29.1628145 65.1580033,28.9719055 C64.83677,28.7741236 64.6083033,28.5144873 64.4626367,28.1876509 C64.3254033,27.8608145 64.2564033,27.1300145 64.2564033,25.9807418 L64.2564033,12.1337236 L68.3067033,12.1337236 L68.3067033,9.01274182 L64.2564033,9.01274182 L64.2564033,0.737978182 L60.2429033,3.14419636 L60.2429033,9.01274182 L57.2866367,9.01274182 L57.2866367,12.1337236 L60.2429033,12.1337236 L60.2429033,25.7592873 C60.2429033,28.1647418 60.4123367,29.74776 60.74047,30.4945964 C61.06937,31.2483055 61.63517,31.8569236 62.4371033,32.3135782 C63.2467033,32.7786327 64.3783033,33.0061964 65.8449367,33.0061964 C66.7396367,33.0061964 67.7562367,32.8847782 68.88707,32.6480509 L68.3067033,29.10096 Z M53.2923033,32.6946327 L57.3196033,32.6946327 L57.3196033,0.000305454545 L53.2923033,0.000305454545 L53.2923033,32.6946327 Z M34.9835367,18.5734691 C35.1215367,16.5108873 35.81767,14.8591418 37.0788367,13.6251055 C38.3392367,12.3925964 39.89787,11.7763418 41.74707,11.7763418 C43.7879367,11.7763418 45.4531367,12.5521964 46.73807,14.09856 C47.57067,15.0867055 48.0828033,16.5872509 48.2591367,18.5734691 L34.9835367,18.5734691 Z M48.2131367,25.0666691 C47.6013367,26.7642327 46.7764033,27.9975055 45.7299033,28.7664873 C44.6826367,29.5431055 43.4207033,29.9310327 41.9464033,29.9310327 C39.9584367,29.9310327 38.30857,29.2384145 36.97917,27.8531782 C35.6482367,26.4755782 34.9076367,24.48096 34.7627367,21.8777236 L52.49267,21.8777236 C52.5080033,21.4050327 52.5149033,21.0476509 52.5149033,20.8040509 C52.5149033,16.8988145 51.5067367,13.8618327 49.4896367,11.7076145 C47.4794367,9.55339636 44.87967,8.47285091 41.7018367,8.47285091 C38.4159033,8.47285091 35.74867,9.57630545 33.6848033,11.7763418 C31.6286033,13.9756145 30.5974367,17.0660509 30.5974367,21.0552873 C30.5974367,24.9070691 31.61327,27.8989964 33.65337,30.0295418 C35.68657,32.1616145 38.44657,33.2268873 41.9234033,33.2268873 C44.6826367,33.2268873 46.9512033,32.5571782 48.73217,31.2253964 C50.50547,29.8852145 51.71987,28.0043782 52.3784367,25.5767782 L48.2131367,25.0666691 Z M7.27543667,32.6946327 L-0.00023,9.01274182 L4.16583667,9.01274182 L7.94780333,22.6848873 L9.35463667,27.7691782 C9.41597,27.5103055 9.82843667,25.8814691 10.58437,22.8819055 L14.36787,9.01274182 L18.51017,9.01274182 L22.07057,22.7452145 L23.2627367,27.2743418 L24.62357,22.6993964 L28.69687,9.01274182 L32.6176033,9.01274182 L25.1817033,32.6946327 L21.00107,32.6946327 L17.2183367,18.5123782 L16.29297,14.4704509 L11.4867367,32.6946327 L7.27543667,32.6946327 Z" id="Fill-1"></path>
+                        <path d="M8.43854667,39.2631273 C8.55431333,39.2852727 8.65704667,39.3013091 8.74674667,39.312 C8.83721333,39.3234545 8.91311333,39.3288 8.97674667,39.3288 C9.20444667,39.3288 9.40071333,39.2409818 9.56631333,39.0661091 C9.73114667,38.8904727 9.81241333,38.6636727 9.81241333,38.3849455 C9.81241333,38.1925091 9.77408,38.0145818 9.69511333,37.8504 C9.61614667,37.6854545 9.50421333,37.5625091 9.36008,37.4808 C9.21594667,37.3990909 9.05188,37.3578545 8.86864667,37.3578545 C8.75671333,37.3578545 8.61334667,37.3792364 8.43854667,37.4204727 L8.43854667,39.2631273 Z M8.43854667,39.4494545 L8.43854667,40.7407636 C8.43854667,41.0187273 8.46921333,41.1920727 8.52978,41.2600364 C8.61334667,41.3554909 8.73984667,41.4036 8.90774667,41.4036 L9.07794667,41.4036 L9.07794667,41.5242545 L7.17201333,41.5242545 L7.17201333,41.4036 L7.33991333,41.4036 C7.52774667,41.4036 7.66191333,41.3425091 7.74241333,41.2203273 C7.78688,41.1531273 7.80911333,40.9935273 7.80911333,40.7407636 L7.80911333,37.8778909 C7.80911333,37.5991636 7.77921333,37.4258182 7.72018,37.3578545 C7.63508,37.2624 7.50781333,37.2142909 7.33991333,37.2142909 L7.17201333,37.2142909 L7.17201333,37.0936364 L8.80348,37.0936364 C9.20061333,37.0936364 9.51418,37.1341091 9.74418,37.2158182 C9.97418,37.2982909 10.16738,37.4349818 10.3253133,37.6297091 C10.48248,37.8236727 10.5614467,38.0527636 10.5614467,38.3192727 C10.5614467,38.6797091 10.4418467,38.9744727 10.20188,39.2012727 C9.96268,39.4280727 9.62381333,39.5410909 9.18681333,39.5410909 C9.08024667,39.5410909 8.96371333,39.5334545 8.83798,39.5181818 C8.71378,39.5029091 8.58114667,39.48 8.43854667,39.4494545 L8.43854667,39.4494545 Z" id="Fill-4"></path>
+                        <path d="M23.4870633,41.4034473 L23.4870633,41.5241018 L21.58113,41.5241018 L21.58113,41.4034473 L21.73753,41.4034473 C21.92153,41.4034473 22.0556967,41.3499927 22.1392633,41.2438473 C22.19063,41.1735927 22.2166967,41.0063564 22.2166967,40.7406109 L22.2166967,37.8777382 C22.2166967,37.6539927 22.2036633,37.5058473 22.17453,37.4333018 C22.1522967,37.3790836 22.10783,37.3317382 22.0395967,37.2927927 C21.9437633,37.2408655 21.84333,37.2149018 21.73753,37.2149018 L21.58113,37.2149018 L21.58113,37.0934836 L23.4870633,37.0934836 L23.4870633,37.2149018 L23.3260633,37.2149018 C23.14513,37.2149018 23.0124967,37.2675927 22.92893,37.3745018 C22.8744967,37.4439927 22.8468967,37.6119927 22.8468967,37.8777382 L22.8468967,40.7406109 C22.8468967,40.96512 22.8614633,41.1125018 22.88983,41.1850473 C22.9112967,41.2392655 22.9580633,41.2858473 23.02783,41.3255564 C23.1213633,41.3782473 23.22103,41.4034473 23.3260633,41.4034473 L23.4870633,41.4034473 Z" id="Fill-6"></path>
+                        <path d="M37.0096067,39.0707673 L37.9648733,40.48884 C38.2286067,40.8805855 38.42564,41.1287673 38.5536733,41.2318582 C38.6817067,41.3364764 38.84424,41.3929855 39.0412733,41.4036764 L39.0412733,41.5243309 L37.13074,41.5243309 L37.13074,41.4036764 C37.2580067,41.4021491 37.35154,41.3884036 37.4128733,41.3647309 C37.45964,41.34564 37.49644,41.3150945 37.52634,41.2753855 C37.5554733,41.2349127 37.5715733,41.1929127 37.5715733,41.1516764 C37.5715733,41.10204 37.56084,41.0524036 37.5409067,41.0020036 C37.5255733,40.9645855 37.4657733,40.8691309 37.36074,40.7141127 L36.60634,39.5762945 L35.6740733,40.7668036 C35.57594,40.8935673 35.5176733,40.9775673 35.4969733,41.0203309 C35.47704,41.0615673 35.46784,41.1066218 35.46784,41.1516764 C35.46784,41.2211673 35.4969733,41.2799673 35.5567733,41.3257855 C35.61504,41.37084 35.72774,41.3975673 35.8948733,41.4036764 L35.8948733,41.5243309 L34.3163067,41.5243309 L34.3163067,41.4036764 C34.4274733,41.3929855 34.5233067,41.37084 34.6045733,41.3349491 C34.74104,41.27844 34.86984,41.2020764 34.99174,41.1066218 C35.1144067,41.0104036 35.25394,40.8637855 35.4118733,40.66524 L36.46144,39.3449127 L35.5866733,38.0673491 C35.3474733,37.7206582 35.1450733,37.4946218 34.9794733,37.3861855 C34.81234,37.2777491 34.6206733,37.22124 34.40524,37.2143673 L34.40524,37.0937127 L36.46144,37.0937127 L36.46144,37.2143673 C36.28664,37.22124 36.1662733,37.2494945 36.10264,37.2991309 C36.03824,37.3495309 36.0068067,37.4052764 36.0068067,37.4656036 C36.0068067,37.5465491 36.0581733,37.6641491 36.1632067,37.8191673 L36.8447733,38.8348036 L37.6359733,37.8390218 C37.7279733,37.7206582 37.7847067,37.6404764 37.80464,37.5969491 C37.8261067,37.5534218 37.83684,37.5083673 37.83684,37.4633127 C37.83684,37.4167309 37.8238067,37.3762582 37.7969733,37.3418945 C37.7640067,37.2960764 37.7226067,37.2640036 37.6727733,37.2456764 C37.6221733,37.2265855 37.5186733,37.2166582 37.36074,37.2143673 L37.36074,37.0937127 L38.9393067,37.0937127 L38.9393067,37.2143673 C38.81434,37.22124 38.7123733,37.2410945 38.6334067,37.2731673 C38.51534,37.3235673 38.40724,37.3907673 38.30834,37.4762945 C38.2109733,37.5610582 38.0722067,37.7183673 37.89204,37.9459309 L37.0096067,39.0707673 Z" id="Fill-8"></path>
+                        <path d="M51.1390433,37.3354036 L51.1390433,39.0871855 L52.1165433,39.0871855 C52.3710767,39.0871855 52.5397433,39.04824 52.62561,38.97264 C52.7390767,38.8726036 52.80271,38.6962036 52.8157433,38.4426764 L52.9368767,38.4426764 L52.9368767,39.9852218 L52.8157433,39.9852218 C52.78431,39.7698764 52.75441,39.6316582 52.7237433,39.5705673 C52.68541,39.4942036 52.6194767,39.43464 52.53131,39.3903491 C52.4408433,39.3475855 52.3028433,39.32544 52.1165433,39.32544 L51.1390433,39.32544 L51.1390433,40.7862764 C51.1390433,40.9817673 51.1482433,41.1024218 51.16511,41.1436582 C51.1827433,41.1871855 51.21341,41.2207855 51.2563433,41.2452218 C51.3015767,41.2704218 51.38361,41.28264 51.5070433,41.28264 L52.2614433,41.28264 C52.5121433,41.28264 52.6953767,41.2650764 52.80961,41.2307127 C52.92231,41.1963491 53.03271,41.1276218 53.1377433,41.0245309 C53.2726767,40.8886036 53.4114433,40.68624 53.5540433,40.4128582 L53.6851433,40.4128582 L53.3002767,41.5239491 L49.87251,41.5239491 L49.87251,41.4032945 L50.0304433,41.4032945 C50.1354767,41.4032945 50.2343767,41.3788582 50.3286767,41.3284582 C50.3984433,41.2940945 50.4467433,41.24064 50.4712767,41.1719127 C50.4965767,41.1024218 50.50961,40.9588582 50.50961,40.7435127 L50.50961,37.86384 C50.50961,37.5835855 50.4812433,37.41024 50.4237433,37.3453309 C50.3455433,37.2575127 50.2136767,37.2147491 50.0304433,37.2147491 L49.87251,37.2147491 L49.87251,37.0933309 L53.3002767,37.0933309 L53.3508767,38.0639127 L53.2228433,38.0639127 C53.1760767,37.8310036 53.1254767,37.6698764 53.06951,37.5835855 C53.0135433,37.4965309 52.93151,37.4300945 52.82111,37.3842764 C52.7344767,37.35144 52.5803767,37.3354036 52.3603433,37.3354036 L51.1390433,37.3354036 Z" id="Fill-11"></path>
+                        <path d="M68.3067033,40.2997636 L68.4148033,40.3219091 L68.0345367,41.5246364 L64.5891367,41.5246364 L64.5891367,41.4032182 L64.75627,41.4032182 C64.9441033,41.4032182 65.0798033,41.3421273 65.1603033,41.2207091 C65.2063033,41.1512182 65.2293033,40.9893273 65.2293033,40.7365636 L65.2293033,37.8775091 C65.2293033,37.6010727 65.1986367,37.4284909 65.1373033,37.3582364 C65.0522033,37.2620182 64.9257033,37.2146727 64.75627,37.2146727 L64.5891367,37.2146727 L64.5891367,37.0932545 L66.60317,37.0932545 L66.60317,37.2146727 C66.3678033,37.2116182 66.2022033,37.2337636 66.10637,37.2795818 C66.0113033,37.3254 65.9469033,37.3834364 65.9116367,37.4529273 C65.87637,37.5224182 65.8595033,37.6896545 65.8595033,37.9538727 L65.8595033,40.7365636 C65.8595033,40.9175455 65.87637,41.0427818 65.9116367,41.1099818 C65.9377033,41.1558 65.9791033,41.1886364 66.03277,41.2107818 C66.0872033,41.2329273 66.25817,41.2436182 66.5449033,41.2436182 L66.8692033,41.2436182 C67.21037,41.2436182 67.4503367,41.2184182 67.5883367,41.1687818 C67.72557,41.1183818 67.85207,41.0298 67.9655367,40.9022727 C68.0790033,40.7755091 68.1932367,40.5731455 68.3067033,40.2997636" id="Fill-13"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo_dark.svg b/app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo_dark.svg
new file mode 100644
index 000000000..40698fd17
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/web/images/WeltPixel_logo_dark.svg
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="69px" height="42px" viewBox="0 0 69 42" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 41 (35326) - http://www.bohemiancoding.com/sketch -->
+    <title>logo_white</title>
+    <desc>Created with Sketch.</desc>
+    <defs></defs>
+    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="weltpixel_homepage-2" transform="translate(-80.000000, -14.000000)" fill="#000000">
+            <g id="1_header">
+                <g id="menu">
+                    <g id="logo_white" transform="translate(80.000000, 14.000000)">
+                        <path d="M68.3067033,29.10096 C67.5730033,29.2078691 66.9842033,29.2613236 66.5334033,29.2613236 C65.9369367,29.2613236 65.47847,29.1628145 65.1580033,28.9719055 C64.83677,28.7741236 64.6083033,28.5144873 64.4626367,28.1876509 C64.3254033,27.8608145 64.2564033,27.1300145 64.2564033,25.9807418 L64.2564033,12.1337236 L68.3067033,12.1337236 L68.3067033,9.01274182 L64.2564033,9.01274182 L64.2564033,0.737978182 L60.2429033,3.14419636 L60.2429033,9.01274182 L57.2866367,9.01274182 L57.2866367,12.1337236 L60.2429033,12.1337236 L60.2429033,25.7592873 C60.2429033,28.1647418 60.4123367,29.74776 60.74047,30.4945964 C61.06937,31.2483055 61.63517,31.8569236 62.4371033,32.3135782 C63.2467033,32.7786327 64.3783033,33.0061964 65.8449367,33.0061964 C66.7396367,33.0061964 67.7562367,32.8847782 68.88707,32.6480509 L68.3067033,29.10096 Z M53.2923033,32.6946327 L57.3196033,32.6946327 L57.3196033,0.000305454545 L53.2923033,0.000305454545 L53.2923033,32.6946327 Z M34.9835367,18.5734691 C35.1215367,16.5108873 35.81767,14.8591418 37.0788367,13.6251055 C38.3392367,12.3925964 39.89787,11.7763418 41.74707,11.7763418 C43.7879367,11.7763418 45.4531367,12.5521964 46.73807,14.09856 C47.57067,15.0867055 48.0828033,16.5872509 48.2591367,18.5734691 L34.9835367,18.5734691 Z M48.2131367,25.0666691 C47.6013367,26.7642327 46.7764033,27.9975055 45.7299033,28.7664873 C44.6826367,29.5431055 43.4207033,29.9310327 41.9464033,29.9310327 C39.9584367,29.9310327 38.30857,29.2384145 36.97917,27.8531782 C35.6482367,26.4755782 34.9076367,24.48096 34.7627367,21.8777236 L52.49267,21.8777236 C52.5080033,21.4050327 52.5149033,21.0476509 52.5149033,20.8040509 C52.5149033,16.8988145 51.5067367,13.8618327 49.4896367,11.7076145 C47.4794367,9.55339636 44.87967,8.47285091 41.7018367,8.47285091 C38.4159033,8.47285091 35.74867,9.57630545 33.6848033,11.7763418 C31.6286033,13.9756145 30.5974367,17.0660509 30.5974367,21.0552873 C30.5974367,24.9070691 31.61327,27.8989964 33.65337,30.0295418 C35.68657,32.1616145 38.44657,33.2268873 41.9234033,33.2268873 C44.6826367,33.2268873 46.9512033,32.5571782 48.73217,31.2253964 C50.50547,29.8852145 51.71987,28.0043782 52.3784367,25.5767782 L48.2131367,25.0666691 Z M7.27543667,32.6946327 L-0.00023,9.01274182 L4.16583667,9.01274182 L7.94780333,22.6848873 L9.35463667,27.7691782 C9.41597,27.5103055 9.82843667,25.8814691 10.58437,22.8819055 L14.36787,9.01274182 L18.51017,9.01274182 L22.07057,22.7452145 L23.2627367,27.2743418 L24.62357,22.6993964 L28.69687,9.01274182 L32.6176033,9.01274182 L25.1817033,32.6946327 L21.00107,32.6946327 L17.2183367,18.5123782 L16.29297,14.4704509 L11.4867367,32.6946327 L7.27543667,32.6946327 Z" id="Fill-1"></path>
+                        <path d="M8.43854667,39.2631273 C8.55431333,39.2852727 8.65704667,39.3013091 8.74674667,39.312 C8.83721333,39.3234545 8.91311333,39.3288 8.97674667,39.3288 C9.20444667,39.3288 9.40071333,39.2409818 9.56631333,39.0661091 C9.73114667,38.8904727 9.81241333,38.6636727 9.81241333,38.3849455 C9.81241333,38.1925091 9.77408,38.0145818 9.69511333,37.8504 C9.61614667,37.6854545 9.50421333,37.5625091 9.36008,37.4808 C9.21594667,37.3990909 9.05188,37.3578545 8.86864667,37.3578545 C8.75671333,37.3578545 8.61334667,37.3792364 8.43854667,37.4204727 L8.43854667,39.2631273 Z M8.43854667,39.4494545 L8.43854667,40.7407636 C8.43854667,41.0187273 8.46921333,41.1920727 8.52978,41.2600364 C8.61334667,41.3554909 8.73984667,41.4036 8.90774667,41.4036 L9.07794667,41.4036 L9.07794667,41.5242545 L7.17201333,41.5242545 L7.17201333,41.4036 L7.33991333,41.4036 C7.52774667,41.4036 7.66191333,41.3425091 7.74241333,41.2203273 C7.78688,41.1531273 7.80911333,40.9935273 7.80911333,40.7407636 L7.80911333,37.8778909 C7.80911333,37.5991636 7.77921333,37.4258182 7.72018,37.3578545 C7.63508,37.2624 7.50781333,37.2142909 7.33991333,37.2142909 L7.17201333,37.2142909 L7.17201333,37.0936364 L8.80348,37.0936364 C9.20061333,37.0936364 9.51418,37.1341091 9.74418,37.2158182 C9.97418,37.2982909 10.16738,37.4349818 10.3253133,37.6297091 C10.48248,37.8236727 10.5614467,38.0527636 10.5614467,38.3192727 C10.5614467,38.6797091 10.4418467,38.9744727 10.20188,39.2012727 C9.96268,39.4280727 9.62381333,39.5410909 9.18681333,39.5410909 C9.08024667,39.5410909 8.96371333,39.5334545 8.83798,39.5181818 C8.71378,39.5029091 8.58114667,39.48 8.43854667,39.4494545 L8.43854667,39.4494545 Z" id="Fill-4"></path>
+                        <path d="M23.4870633,41.4034473 L23.4870633,41.5241018 L21.58113,41.5241018 L21.58113,41.4034473 L21.73753,41.4034473 C21.92153,41.4034473 22.0556967,41.3499927 22.1392633,41.2438473 C22.19063,41.1735927 22.2166967,41.0063564 22.2166967,40.7406109 L22.2166967,37.8777382 C22.2166967,37.6539927 22.2036633,37.5058473 22.17453,37.4333018 C22.1522967,37.3790836 22.10783,37.3317382 22.0395967,37.2927927 C21.9437633,37.2408655 21.84333,37.2149018 21.73753,37.2149018 L21.58113,37.2149018 L21.58113,37.0934836 L23.4870633,37.0934836 L23.4870633,37.2149018 L23.3260633,37.2149018 C23.14513,37.2149018 23.0124967,37.2675927 22.92893,37.3745018 C22.8744967,37.4439927 22.8468967,37.6119927 22.8468967,37.8777382 L22.8468967,40.7406109 C22.8468967,40.96512 22.8614633,41.1125018 22.88983,41.1850473 C22.9112967,41.2392655 22.9580633,41.2858473 23.02783,41.3255564 C23.1213633,41.3782473 23.22103,41.4034473 23.3260633,41.4034473 L23.4870633,41.4034473 Z" id="Fill-6"></path>
+                        <path d="M37.0096067,39.0707673 L37.9648733,40.48884 C38.2286067,40.8805855 38.42564,41.1287673 38.5536733,41.2318582 C38.6817067,41.3364764 38.84424,41.3929855 39.0412733,41.4036764 L39.0412733,41.5243309 L37.13074,41.5243309 L37.13074,41.4036764 C37.2580067,41.4021491 37.35154,41.3884036 37.4128733,41.3647309 C37.45964,41.34564 37.49644,41.3150945 37.52634,41.2753855 C37.5554733,41.2349127 37.5715733,41.1929127 37.5715733,41.1516764 C37.5715733,41.10204 37.56084,41.0524036 37.5409067,41.0020036 C37.5255733,40.9645855 37.4657733,40.8691309 37.36074,40.7141127 L36.60634,39.5762945 L35.6740733,40.7668036 C35.57594,40.8935673 35.5176733,40.9775673 35.4969733,41.0203309 C35.47704,41.0615673 35.46784,41.1066218 35.46784,41.1516764 C35.46784,41.2211673 35.4969733,41.2799673 35.5567733,41.3257855 C35.61504,41.37084 35.72774,41.3975673 35.8948733,41.4036764 L35.8948733,41.5243309 L34.3163067,41.5243309 L34.3163067,41.4036764 C34.4274733,41.3929855 34.5233067,41.37084 34.6045733,41.3349491 C34.74104,41.27844 34.86984,41.2020764 34.99174,41.1066218 C35.1144067,41.0104036 35.25394,40.8637855 35.4118733,40.66524 L36.46144,39.3449127 L35.5866733,38.0673491 C35.3474733,37.7206582 35.1450733,37.4946218 34.9794733,37.3861855 C34.81234,37.2777491 34.6206733,37.22124 34.40524,37.2143673 L34.40524,37.0937127 L36.46144,37.0937127 L36.46144,37.2143673 C36.28664,37.22124 36.1662733,37.2494945 36.10264,37.2991309 C36.03824,37.3495309 36.0068067,37.4052764 36.0068067,37.4656036 C36.0068067,37.5465491 36.0581733,37.6641491 36.1632067,37.8191673 L36.8447733,38.8348036 L37.6359733,37.8390218 C37.7279733,37.7206582 37.7847067,37.6404764 37.80464,37.5969491 C37.8261067,37.5534218 37.83684,37.5083673 37.83684,37.4633127 C37.83684,37.4167309 37.8238067,37.3762582 37.7969733,37.3418945 C37.7640067,37.2960764 37.7226067,37.2640036 37.6727733,37.2456764 C37.6221733,37.2265855 37.5186733,37.2166582 37.36074,37.2143673 L37.36074,37.0937127 L38.9393067,37.0937127 L38.9393067,37.2143673 C38.81434,37.22124 38.7123733,37.2410945 38.6334067,37.2731673 C38.51534,37.3235673 38.40724,37.3907673 38.30834,37.4762945 C38.2109733,37.5610582 38.0722067,37.7183673 37.89204,37.9459309 L37.0096067,39.0707673 Z" id="Fill-8"></path>
+                        <path d="M51.1390433,37.3354036 L51.1390433,39.0871855 L52.1165433,39.0871855 C52.3710767,39.0871855 52.5397433,39.04824 52.62561,38.97264 C52.7390767,38.8726036 52.80271,38.6962036 52.8157433,38.4426764 L52.9368767,38.4426764 L52.9368767,39.9852218 L52.8157433,39.9852218 C52.78431,39.7698764 52.75441,39.6316582 52.7237433,39.5705673 C52.68541,39.4942036 52.6194767,39.43464 52.53131,39.3903491 C52.4408433,39.3475855 52.3028433,39.32544 52.1165433,39.32544 L51.1390433,39.32544 L51.1390433,40.7862764 C51.1390433,40.9817673 51.1482433,41.1024218 51.16511,41.1436582 C51.1827433,41.1871855 51.21341,41.2207855 51.2563433,41.2452218 C51.3015767,41.2704218 51.38361,41.28264 51.5070433,41.28264 L52.2614433,41.28264 C52.5121433,41.28264 52.6953767,41.2650764 52.80961,41.2307127 C52.92231,41.1963491 53.03271,41.1276218 53.1377433,41.0245309 C53.2726767,40.8886036 53.4114433,40.68624 53.5540433,40.4128582 L53.6851433,40.4128582 L53.3002767,41.5239491 L49.87251,41.5239491 L49.87251,41.4032945 L50.0304433,41.4032945 C50.1354767,41.4032945 50.2343767,41.3788582 50.3286767,41.3284582 C50.3984433,41.2940945 50.4467433,41.24064 50.4712767,41.1719127 C50.4965767,41.1024218 50.50961,40.9588582 50.50961,40.7435127 L50.50961,37.86384 C50.50961,37.5835855 50.4812433,37.41024 50.4237433,37.3453309 C50.3455433,37.2575127 50.2136767,37.2147491 50.0304433,37.2147491 L49.87251,37.2147491 L49.87251,37.0933309 L53.3002767,37.0933309 L53.3508767,38.0639127 L53.2228433,38.0639127 C53.1760767,37.8310036 53.1254767,37.6698764 53.06951,37.5835855 C53.0135433,37.4965309 52.93151,37.4300945 52.82111,37.3842764 C52.7344767,37.35144 52.5803767,37.3354036 52.3603433,37.3354036 L51.1390433,37.3354036 Z" id="Fill-11"></path>
+                        <path d="M68.3067033,40.2997636 L68.4148033,40.3219091 L68.0345367,41.5246364 L64.5891367,41.5246364 L64.5891367,41.4032182 L64.75627,41.4032182 C64.9441033,41.4032182 65.0798033,41.3421273 65.1603033,41.2207091 C65.2063033,41.1512182 65.2293033,40.9893273 65.2293033,40.7365636 L65.2293033,37.8775091 C65.2293033,37.6010727 65.1986367,37.4284909 65.1373033,37.3582364 C65.0522033,37.2620182 64.9257033,37.2146727 64.75627,37.2146727 L64.5891367,37.2146727 L64.5891367,37.0932545 L66.60317,37.0932545 L66.60317,37.2146727 C66.3678033,37.2116182 66.2022033,37.2337636 66.10637,37.2795818 C66.0113033,37.3254 65.9469033,37.3834364 65.9116367,37.4529273 C65.87637,37.5224182 65.8595033,37.6896545 65.8595033,37.9538727 L65.8595033,40.7365636 C65.8595033,40.9175455 65.87637,41.0427818 65.9116367,41.1099818 C65.9377033,41.1558 65.9791033,41.1886364 66.03277,41.2107818 C66.0872033,41.2329273 66.25817,41.2436182 66.5449033,41.2436182 L66.8692033,41.2436182 C67.21037,41.2436182 67.4503367,41.2184182 67.5883367,41.1687818 C67.72557,41.1183818 67.85207,41.0298 67.9655367,40.9022727 C68.0790033,40.7755091 68.1932367,40.5731455 68.3067033,40.2997636" id="Fill-13"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/arrow.gif b/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/arrow.gif
new file mode 100644
index 0000000000000000000000000000000000000000..246478a864f812d93d4cd0e0d0ad1c8e2d09c825
GIT binary patch
literal 66
zcmZ?wbhEHbWM|-JSjfb{z`*eT|Nj*>6)S8i6o0ZXaxpM5=zv5)@(fJEJ}nXjJKr?q
S<ab$pTzN(7g^4F4gEas}ITGdo

literal 0
HcmV?d00001

diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/cross.gif b/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/cross.gif
new file mode 100644
index 0000000000000000000000000000000000000000..0ee9c7ac517bee40b78aea03afa809631f0b69fa
GIT binary patch
literal 83
zcmZ?wbhEHb<Y(Y#Sjfo0z`*by1{8m?Fmf?4G3bCqLGlbtDpTYIj?caQs5>YyUH_EM
dkN*vF4%41#_Gw-zytPEKz-IruP-#{MYXG_x9<KlZ

literal 0
HcmV?d00001

diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/hs.png b/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/hs.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d94486cedaf7111d010fdaf2cefad45fd1f878b
GIT binary patch
literal 2684
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
Xaop<7PcCl;1_lOCS3j3^P6<r_7_>-2

literal 0
HcmV?d00001

diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/hv.png b/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/hv.png
new file mode 100644
index 0000000000000000000000000000000000000000..1c5e01f8bcecc4cf835e8eeeaa43ef2c06789022
GIT binary patch
literal 2865
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

literal 0
HcmV?d00001

diff --git a/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/jscolor.js b/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/jscolor.js
new file mode 100644
index 000000000..ef3bce589
--- /dev/null
+++ b/app/code/WeltPixel/Backend/view/adminhtml/web/jscolor/jscolor.js
@@ -0,0 +1,997 @@
+/**
+ * jscolor, JavaScript Color Picker
+ *
+ * @version 1.4.3
+ * @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html
+ * @author  Jan Odvarko, http://odvarko.cz
+ * @created 2008-06-15
+ * @updated 2014-07-16
+ * @link    http://jscolor.com
+ */
+
+
+var jscolor = {
+
+
+	dir : '', // location of jscolor directory (leave empty to autodetect)
+	bindClass : 'color', // class name
+	binding : true, // automatic binding via <input class="...">
+	preloading : true, // use image preloading?
+
+
+	install : function() {
+		jscolor.addEvent(window, 'load', jscolor.init);
+	},
+
+
+	init : function() {
+		if(jscolor.binding) {
+			jscolor.bind();
+		}
+		if(jscolor.preloading) {
+			jscolor.preload();
+		}
+	},
+
+
+	getDir : function() {
+		if(!jscolor.dir) {
+			var detected = jscolor.detectDir();
+			jscolor.dir = detected!==false ? detected : 'jscolor/';
+		}
+		return jscolor.dir;
+	},
+
+
+	detectDir : function() {
+		var base = location.href;
+
+		var e = document.getElementsByTagName('base');
+		for(var i=0; i<e.length; i+=1) {
+			if(e[i].href) { base = e[i].href; }
+		}
+
+		var e = document.getElementsByTagName('script');
+		for(var i=0; i<e.length; i+=1) {
+			if(e[i].src && /(^|\/)jscolor\.js([?#].*)?$/i.test(e[i].src)) {
+				var src = new jscolor.URI(e[i].src);
+				var srcAbs = src.toAbsolute(base);
+				srcAbs.path = srcAbs.path.replace(/[^\/]+$/, ''); // remove filename
+				srcAbs.query = null;
+				srcAbs.fragment = null;
+				return srcAbs.toString();
+			}
+		}
+		return false;
+	},
+
+
+	bind : function() {
+		var matchClass = new RegExp('(^|\\s)('+jscolor.bindClass+')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');
+		var e = document.getElementsByTagName('input');
+		for(var i=0; i<e.length; i+=1) {
+			var m;
+			if(!e[i].color && e[i].className && (m = e[i].className.match(matchClass))) {
+				var prop = {};
+				if(m[4]) {
+					try {
+						prop = (new Function ('return (' + m[4] + ')'))();
+					} catch(eInvalidProp) {}
+				}
+				e[i].color = new jscolor.color(e[i], prop);
+			}
+		}
+	},
+
+
+	preload : function() {
+		for(var fn in jscolor.imgRequire) {
+			if(jscolor.imgRequire.hasOwnProperty(fn)) {
+				jscolor.loadImage(fn);
+			}
+		}
+	},
+
+
+	images : {
+		pad : [ 181, 101 ],
+		sld : [ 16, 101 ],
+		cross : [ 15, 15 ],
+		arrow : [ 7, 11 ]
+	},
+
+
+	imgRequire : {},
+	imgLoaded : {},
+
+
+	requireImage : function(filename) {
+		jscolor.imgRequire[filename] = true;
+	},
+
+
+	loadImage : function(filename) {
+		if(!jscolor.imgLoaded[filename]) {
+			jscolor.imgLoaded[filename] = new Image();
+			jscolor.imgLoaded[filename].src = jscolor.getDir()+filename;
+		}
+	},
+
+
+	fetchElement : function(mixed) {
+		return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
+	},
+
+
+	addEvent : function(el, evnt, func) {
+		if(el.addEventListener) {
+			el.addEventListener(evnt, func, false);
+		} else if(el.attachEvent) {
+			el.attachEvent('on'+evnt, func);
+		}
+	},
+
+
+	fireEvent : function(el, evnt) {
+		if(!el) {
+			return;
+		}
+		if(document.createEvent) {
+			var ev = document.createEvent('HTMLEvents');
+			ev.initEvent(evnt, true, true);
+			el.dispatchEvent(ev);
+		} else if(document.createEventObject) {
+			var ev = document.createEventObject();
+			el.fireEvent('on'+evnt, ev);
+		} else if(el['on'+evnt]) { // alternatively use the traditional event model (IE5)
+			el['on'+evnt]();
+		}
+	},
+
+
+	getElementPos : function(e) {
+		var e1=e, e2=e;
+		var x=0, y=0;
+		if(e1.offsetParent) {
+			do {
+				x += e1.offsetLeft;
+				y += e1.offsetTop;
+			} while(e1 = e1.offsetParent);
+		}
+		while((e2 = e2.parentNode) && e2.nodeName.toUpperCase() !== 'BODY') {
+			x -= e2.scrollLeft;
+			y -= e2.scrollTop;
+		}
+		return [x, y];
+	},
+
+
+	getElementSize : function(e) {
+		return [e.offsetWidth, e.offsetHeight];
+	},
+
+
+	getRelMousePos : function(e) {
+		var x = 0, y = 0;
+		if (!e) { e = window.event; }
+		if (typeof e.offsetX === 'number') {
+			x = e.offsetX;
+			y = e.offsetY;
+		} else if (typeof e.layerX === 'number') {
+			x = e.layerX;
+			y = e.layerY;
+		}
+		return { x: x, y: y };
+	},
+
+
+	getViewPos : function() {
+		if(typeof window.pageYOffset === 'number') {
+			return [window.pageXOffset, window.pageYOffset];
+		} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
+			return [document.body.scrollLeft, document.body.scrollTop];
+		} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
+			return [document.documentElement.scrollLeft, document.documentElement.scrollTop];
+		} else {
+			return [0, 0];
+		}
+	},
+
+
+	getViewSize : function() {
+		if(typeof window.innerWidth === 'number') {
+			return [window.innerWidth, window.innerHeight];
+		} else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
+			return [document.body.clientWidth, document.body.clientHeight];
+		} else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
+			return [document.documentElement.clientWidth, document.documentElement.clientHeight];
+		} else {
+			return [0, 0];
+		}
+	},
+
+
+	URI : function(uri) { // See RFC3986
+
+		this.scheme = null;
+		this.authority = null;
+		this.path = '';
+		this.query = null;
+		this.fragment = null;
+
+		this.parse = function(uri) {
+			var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
+			this.scheme = m[3] ? m[2] : null;
+			this.authority = m[5] ? m[6] : null;
+			this.path = m[7];
+			this.query = m[9] ? m[10] : null;
+			this.fragment = m[12] ? m[13] : null;
+			return this;
+		};
+
+		this.toString = function() {
+			var result = '';
+			if(this.scheme !== null) { result = result + this.scheme + ':'; }
+			if(this.authority !== null) { result = result + '//' + this.authority; }
+			if(this.path !== null) { result = result + this.path; }
+			if(this.query !== null) { result = result + '?' + this.query; }
+			if(this.fragment !== null) { result = result + '#' + this.fragment; }
+			return result;
+		};
+
+		this.toAbsolute = function(base) {
+			var base = new jscolor.URI(base);
+			var r = this;
+			var t = new jscolor.URI;
+
+			if(base.scheme === null) { return false; }
+
+			if(r.scheme !== null && r.scheme.toLowerCase() === base.scheme.toLowerCase()) {
+				r.scheme = null;
+			}
+
+			if(r.scheme !== null) {
+				t.scheme = r.scheme;
+				t.authority = r.authority;
+				t.path = removeDotSegments(r.path);
+				t.query = r.query;
+			} else {
+				if(r.authority !== null) {
+					t.authority = r.authority;
+					t.path = removeDotSegments(r.path);
+					t.query = r.query;
+				} else {
+					if(r.path === '') {
+						t.path = base.path;
+						if(r.query !== null) {
+							t.query = r.query;
+						} else {
+							t.query = base.query;
+						}
+					} else {
+						if(r.path.substr(0,1) === '/') {
+							t.path = removeDotSegments(r.path);
+						} else {
+							if(base.authority !== null && base.path === '') {
+								t.path = '/'+r.path;
+							} else {
+								t.path = base.path.replace(/[^\/]+$/,'')+r.path;
+							}
+							t.path = removeDotSegments(t.path);
+						}
+						t.query = r.query;
+					}
+					t.authority = base.authority;
+				}
+				t.scheme = base.scheme;
+			}
+			t.fragment = r.fragment;
+
+			return t;
+		};
+
+		function removeDotSegments(path) {
+			var out = '';
+			while(path) {
+				if(path.substr(0,3)==='../' || path.substr(0,2)==='./') {
+					path = path.replace(/^\.+/,'').substr(1);
+				} else if(path.substr(0,3)==='/./' || path==='/.') {
+					path = '/'+path.substr(3);
+				} else if(path.substr(0,4)==='/../' || path==='/..') {
+					path = '/'+path.substr(4);
+					out = out.replace(/\/?[^\/]*$/, '');
+				} else if(path==='.' || path==='..') {
+					path = '';
+				} else {
+					var rm = path.match(/^\/?[^\/]*/)[0];
+					path = path.substr(rm.length);
+					out = out + rm;
+				}
+			}
+			return out;
+		}
+
+		if(uri) {
+			this.parse(uri);
+		}
+
+	},
+
+
+	//
+	// Usage example:
+	// var myColor = new jscolor.color(myInputElement)
+	//
+
+	color : function(target, prop) {
+
+
+		this.required = true; // refuse empty values?
+		this.adjust = true; // adjust value to uniform notation?
+		this.hash = false; // prefix color with # symbol?
+		this.caps = true; // uppercase?
+		this.slider = true; // show the value/saturation slider?
+		this.valueElement = target; // value holder
+		this.styleElement = target; // where to reflect current color
+		this.onImmediateChange = null; // onchange callback (can be either string or function)
+		this.hsv = [0, 0, 1]; // read-only  0-6, 0-1, 0-1
+		this.rgb = [1, 1, 1]; // read-only  0-1, 0-1, 0-1
+		this.minH = 0; // read-only  0-6
+		this.maxH = 6; // read-only  0-6
+		this.minS = 0; // read-only  0-1
+		this.maxS = 1; // read-only  0-1
+		this.minV = 0; // read-only  0-1
+		this.maxV = 1; // read-only  0-1
+
+		this.pickerOnfocus = true; // display picker on focus?
+		this.pickerMode = 'HSV'; // HSV | HVS
+		this.pickerPosition = 'bottom'; // left | right | top | bottom
+		this.pickerSmartPosition = true; // automatically adjust picker position when necessary
+		this.pickerButtonHeight = 20; // px
+		this.pickerClosable = false;
+		this.pickerCloseText = 'Close';
+		this.pickerButtonColor = 'ButtonText'; // px
+		this.pickerFace = 10; // px
+		this.pickerFaceColor = 'ThreeDFace'; // CSS color
+		this.pickerBorder = 1; // px
+		this.pickerBorderColor = 'ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight'; // CSS color
+		this.pickerInset = 1; // px
+		this.pickerInsetColor = 'ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow'; // CSS color
+		this.pickerZIndex = 10000;
+
+
+		for(var p in prop) {
+			if(prop.hasOwnProperty(p)) {
+				this[p] = prop[p];
+			}
+		}
+
+
+		this.hidePicker = function() {
+			if(isPickerOwner()) {
+				removePicker();
+			}
+		};
+
+
+		this.showPicker = function() {
+			if(!isPickerOwner()) {
+				var tp = jscolor.getElementPos(target); // target pos
+				var ts = jscolor.getElementSize(target); // target size
+				var vp = jscolor.getViewPos(); // view pos
+				var vs = jscolor.getViewSize(); // view size
+				var ps = getPickerDims(this); // picker size
+				var a, b, c;
+				switch(this.pickerPosition.toLowerCase()) {
+					case 'left': a=1; b=0; c=-1; break;
+					case 'right':a=1; b=0; c=1; break;
+					case 'top':  a=0; b=1; c=-1; break;
+					default:     a=0; b=1; c=1; break;
+				}
+				var l = (ts[b]+ps[b])/2;
+
+				// picker pos
+				if (!this.pickerSmartPosition) {
+					var pp = [
+						tp[a],
+						tp[b]+ts[b]-l+l*c
+					];
+				} else {
+					var pp = [
+						-vp[a]+tp[a]+ps[a] > vs[a] ?
+							(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
+							tp[a],
+						-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
+							(-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
+							(tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
+					];
+				}
+				drawPicker(pp[a], pp[b]);
+			}
+		};
+
+
+		this.importColor = function() {
+			if(!valueElement) {
+				this.exportColor();
+			} else {
+				if(!this.adjust) {
+					if(!this.fromString(valueElement.value, leaveValue)) {
+						styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
+						styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
+						styleElement.style.color = styleElement.jscStyle.color;
+						this.exportColor(leaveValue | leaveStyle);
+					}
+				} else if(!this.required && /^\s*$/.test(valueElement.value)) {
+					valueElement.value = '';
+					styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
+					styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
+					styleElement.style.color = styleElement.jscStyle.color;
+					this.exportColor(leaveValue | leaveStyle);
+
+				} else if(this.fromString(valueElement.value)) {
+					// OK
+				} else {
+					this.exportColor();
+				}
+			}
+		};
+
+
+		this.exportColor = function(flags) {
+			if(!(flags & leaveValue) && valueElement) {
+				var value = this.toString();
+				if(this.caps) { value = value.toUpperCase(); }
+				if(this.hash) { value = '#'+value; }
+				valueElement.value = value;
+			}
+			if(!(flags & leaveStyle) && styleElement) {
+				styleElement.style.backgroundImage = "none";
+				styleElement.style.backgroundColor =
+					'#'+this.toString();
+				styleElement.style.color =
+					0.213 * this.rgb[0] +
+					0.715 * this.rgb[1] +
+					0.072 * this.rgb[2]
+					< 0.5 ? '#FFF' : '#000';
+			}
+			if(!(flags & leavePad) && isPickerOwner()) {
+				redrawPad();
+			}
+			if(!(flags & leaveSld) && isPickerOwner()) {
+				redrawSld();
+			}
+		};
+
+
+		this.fromHSV = function(h, s, v, flags) { // null = don't change
+			if(h !== null) { h = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, h)); }
+			if(s !== null) { s = Math.max(0.0, this.minS, Math.min(1.0, this.maxS, s)); }
+			if(v !== null) { v = Math.max(0.0, this.minV, Math.min(1.0, this.maxV, v)); }
+
+			this.rgb = HSV_RGB(
+				h===null ? this.hsv[0] : (this.hsv[0]=h),
+				s===null ? this.hsv[1] : (this.hsv[1]=s),
+				v===null ? this.hsv[2] : (this.hsv[2]=v)
+			);
+
+			this.exportColor(flags);
+		};
+
+
+		this.fromRGB = function(r, g, b, flags) { // null = don't change
+			if(r !== null) { r = Math.max(0.0, Math.min(1.0, r)); }
+			if(g !== null) { g = Math.max(0.0, Math.min(1.0, g)); }
+			if(b !== null) { b = Math.max(0.0, Math.min(1.0, b)); }
+
+			var hsv = RGB_HSV(
+				r===null ? this.rgb[0] : r,
+				g===null ? this.rgb[1] : g,
+				b===null ? this.rgb[2] : b
+			);
+			if(hsv[0] !== null) {
+				this.hsv[0] = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, hsv[0]));
+			}
+			if(hsv[2] !== 0) {
+				this.hsv[1] = hsv[1]===null ? null : Math.max(0.0, this.minS, Math.min(1.0, this.maxS, hsv[1]));
+			}
+			this.hsv[2] = hsv[2]===null ? null : Math.max(0.0, this.minV, Math.min(1.0, this.maxV, hsv[2]));
+
+			// update RGB according to final HSV, as some values might be trimmed
+			var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
+			this.rgb[0] = rgb[0];
+			this.rgb[1] = rgb[1];
+			this.rgb[2] = rgb[2];
+
+			this.exportColor(flags);
+		};
+
+
+		this.fromString = function(hex, flags) {
+			var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
+			if(!m) {
+				return false;
+			} else {
+				if(m[1].length === 6) { // 6-char notation
+					this.fromRGB(
+						parseInt(m[1].substr(0,2),16) / 255,
+						parseInt(m[1].substr(2,2),16) / 255,
+						parseInt(m[1].substr(4,2),16) / 255,
+						flags
+					);
+				} else { // 3-char notation
+					this.fromRGB(
+						parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255,
+						parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255,
+						parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255,
+						flags
+					);
+				}
+				return true;
+			}
+		};
+
+
+		this.toString = function() {
+			return (
+				(0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) +
+				(0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) +
+				(0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1)
+			);
+		};
+
+
+		function RGB_HSV(r, g, b) {
+			var n = Math.min(Math.min(r,g),b);
+			var v = Math.max(Math.max(r,g),b);
+			var m = v - n;
+			if(m === 0) { return [ null, 0, v ]; }
+			var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
+			return [ h===6?0:h, m/v, v ];
+		}
+
+
+		function HSV_RGB(h, s, v) {
+			if(h === null) { return [ v, v, v ]; }
+			var i = Math.floor(h);
+			var f = i%2 ? h-i : 1-(h-i);
+			var m = v * (1 - s);
+			var n = v * (1 - s*f);
+			switch(i) {
+				case 6:
+				case 0: return [v,n,m];
+				case 1: return [n,v,m];
+				case 2: return [m,v,n];
+				case 3: return [m,n,v];
+				case 4: return [n,m,v];
+				case 5: return [v,m,n];
+			}
+		}
+
+
+		function removePicker() {
+			delete jscolor.picker.owner;
+			document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB);
+		}
+
+
+		function drawPicker(x, y) {
+			if(!jscolor.picker) {
+				jscolor.picker = {
+					box : document.createElement('div'),
+					boxB : document.createElement('div'),
+					pad : document.createElement('div'),
+					padB : document.createElement('div'),
+					padM : document.createElement('div'),
+					sld : document.createElement('div'),
+					sldB : document.createElement('div'),
+					sldM : document.createElement('div'),
+					btn : document.createElement('div'),
+					btnS : document.createElement('span'),
+					btnT : document.createTextNode(THIS.pickerCloseText)
+				};
+				for(var i=0,segSize=4; i<jscolor.images.sld[1]; i+=segSize) {
+					var seg = document.createElement('div');
+					seg.style.height = segSize+'px';
+					seg.style.fontSize = '1px';
+					seg.style.lineHeight = '0';
+					jscolor.picker.sld.appendChild(seg);
+				}
+				jscolor.picker.sldB.appendChild(jscolor.picker.sld);
+				jscolor.picker.box.appendChild(jscolor.picker.sldB);
+				jscolor.picker.box.appendChild(jscolor.picker.sldM);
+				jscolor.picker.padB.appendChild(jscolor.picker.pad);
+				jscolor.picker.box.appendChild(jscolor.picker.padB);
+				jscolor.picker.box.appendChild(jscolor.picker.padM);
+				jscolor.picker.btnS.appendChild(jscolor.picker.btnT);
+				jscolor.picker.btn.appendChild(jscolor.picker.btnS);
+				jscolor.picker.box.appendChild(jscolor.picker.btn);
+				jscolor.picker.boxB.appendChild(jscolor.picker.box);
+			}
+
+			var p = jscolor.picker;
+
+			// controls interaction
+			p.box.onmouseup =
+			p.box.onmouseout = function() { target.focus(); };
+			p.box.onmousedown = function() { abortBlur=true; };
+			p.box.onmousemove = function(e) {
+				if (holdPad || holdSld) {
+					holdPad && setPad(e);
+					holdSld && setSld(e);
+					if (document.selection) {
+						document.selection.empty();
+					} else if (window.getSelection) {
+						window.getSelection().removeAllRanges();
+					}
+					dispatchImmediateChange();
+				}
+			};
+			if('ontouchstart' in window) { // if touch device
+				var handle_touchmove = function(e) {
+					var event={
+						'offsetX': e.touches[0].pageX-touchOffset.X,
+						'offsetY': e.touches[0].pageY-touchOffset.Y
+					};
+					if (holdPad || holdSld) {
+						holdPad && setPad(event);
+						holdSld && setSld(event);
+						dispatchImmediateChange();
+					}
+					e.stopPropagation(); // prevent move "view" on broswer
+					e.preventDefault(); // prevent Default - Android Fix (else android generated only 1-2 touchmove events)
+				};
+				p.box.removeEventListener('touchmove', handle_touchmove, false)
+				p.box.addEventListener('touchmove', handle_touchmove, false)
+			}
+			p.padM.onmouseup =
+			p.padM.onmouseout = function() { if(holdPad) { holdPad=false; jscolor.fireEvent(valueElement,'change'); } };
+			p.padM.onmousedown = function(e) {
+				// if the slider is at the bottom, move it up
+				switch(modeID) {
+					case 0: if (THIS.hsv[2] === 0) { THIS.fromHSV(null, null, 1.0); }; break;
+					case 1: if (THIS.hsv[1] === 0) { THIS.fromHSV(null, 1.0, null); }; break;
+				}
+				holdSld=false;
+				holdPad=true;
+				setPad(e);
+				dispatchImmediateChange();
+			};
+			if('ontouchstart' in window) {
+				p.padM.addEventListener('touchstart', function(e) {
+					touchOffset={
+						'X': e.target.offsetParent.offsetLeft,
+						'Y': e.target.offsetParent.offsetTop
+					};
+					this.onmousedown({
+						'offsetX':e.touches[0].pageX-touchOffset.X,
+						'offsetY':e.touches[0].pageY-touchOffset.Y
+					});
+				});
+			}
+			p.sldM.onmouseup =
+			p.sldM.onmouseout = function() { if(holdSld) { holdSld=false; jscolor.fireEvent(valueElement,'change'); } };
+			p.sldM.onmousedown = function(e) {
+				holdPad=false;
+				holdSld=true;
+				setSld(e);
+				dispatchImmediateChange();
+			};
+			if('ontouchstart' in window) {
+				p.sldM.addEventListener('touchstart', function(e) {
+					touchOffset={
+						'X': e.target.offsetParent.offsetLeft,
+						'Y': e.target.offsetParent.offsetTop
+					};
+					this.onmousedown({
+						'offsetX':e.touches[0].pageX-touchOffset.X,
+						'offsetY':e.touches[0].pageY-touchOffset.Y
+					});
+				});
+			}
+
+			// picker
+			var dims = getPickerDims(THIS);
+			p.box.style.width = dims[0] + 'px';
+			p.box.style.height = dims[1] + 'px';
+
+			// picker border
+			p.boxB.style.position = 'absolute';
+			p.boxB.style.clear = 'both';
+			p.boxB.style.left = x+'px';
+			p.boxB.style.top = y+'px';
+			p.boxB.style.zIndex = THIS.pickerZIndex;
+			p.boxB.style.border = THIS.pickerBorder+'px solid';
+			p.boxB.style.borderColor = THIS.pickerBorderColor;
+			p.boxB.style.background = THIS.pickerFaceColor;
+
+			// pad image
+			p.pad.style.width = jscolor.images.pad[0]+'px';
+			p.pad.style.height = jscolor.images.pad[1]+'px';
+
+			// pad border
+			p.padB.style.position = 'absolute';
+			p.padB.style.left = THIS.pickerFace+'px';
+			p.padB.style.top = THIS.pickerFace+'px';
+			p.padB.style.border = THIS.pickerInset+'px solid';
+			p.padB.style.borderColor = THIS.pickerInsetColor;
+
+			// pad mouse area
+			p.padM.style.position = 'absolute';
+			p.padM.style.left = '0';
+			p.padM.style.top = '0';
+			p.padM.style.width = THIS.pickerFace + 2*THIS.pickerInset + jscolor.images.pad[0] + jscolor.images.arrow[0] + 'px';
+			p.padM.style.height = p.box.style.height;
+			p.padM.style.cursor = 'crosshair';
+
+			// slider image
+			p.sld.style.overflow = 'hidden';
+			p.sld.style.width = jscolor.images.sld[0]+'px';
+			p.sld.style.height = jscolor.images.sld[1]+'px';
+
+			// slider border
+			p.sldB.style.display = THIS.slider ? 'block' : 'none';
+			p.sldB.style.position = 'absolute';
+			p.sldB.style.right = THIS.pickerFace+'px';
+			p.sldB.style.top = THIS.pickerFace+'px';
+			p.sldB.style.border = THIS.pickerInset+'px solid';
+			p.sldB.style.borderColor = THIS.pickerInsetColor;
+
+			// slider mouse area
+			p.sldM.style.display = THIS.slider ? 'block' : 'none';
+			p.sldM.style.position = 'absolute';
+			p.sldM.style.right = '0';
+			p.sldM.style.top = '0';
+			p.sldM.style.width = jscolor.images.sld[0] + jscolor.images.arrow[0] + THIS.pickerFace + 2*THIS.pickerInset + 'px';
+			p.sldM.style.height = p.box.style.height;
+			try {
+				p.sldM.style.cursor = 'pointer';
+			} catch(eOldIE) {
+				p.sldM.style.cursor = 'hand';
+			}
+
+			// "close" button
+			function setBtnBorder() {
+				var insetColors = THIS.pickerInsetColor.split(/\s+/);
+				var pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
+				p.btn.style.borderColor = pickerOutsetColor;
+			}
+			p.btn.style.display = THIS.pickerClosable ? 'block' : 'none';
+			p.btn.style.position = 'absolute';
+			p.btn.style.left = THIS.pickerFace + 'px';
+			p.btn.style.bottom = THIS.pickerFace + 'px';
+			p.btn.style.padding = '0 15px';
+			p.btn.style.height = '18px';
+			p.btn.style.border = THIS.pickerInset + 'px solid';
+			setBtnBorder();
+			p.btn.style.color = THIS.pickerButtonColor;
+			p.btn.style.font = '12px sans-serif';
+			p.btn.style.textAlign = 'center';
+			try {
+				p.btn.style.cursor = 'pointer';
+			} catch(eOldIE) {
+				p.btn.style.cursor = 'hand';
+			}
+			p.btn.onmousedown = function () {
+				THIS.hidePicker();
+			};
+			p.btnS.style.lineHeight = p.btn.style.height;
+
+			// load images in optimal order
+			switch(modeID) {
+				case 0: var padImg = 'hs.png'; break;
+				case 1: var padImg = 'hv.png'; break;
+			}
+			p.padM.style.backgroundImage = "url('"+jscolor.getDir()+"cross.gif')";
+			p.padM.style.backgroundRepeat = "no-repeat";
+			p.sldM.style.backgroundImage = "url('"+jscolor.getDir()+"arrow.gif')";
+			p.sldM.style.backgroundRepeat = "no-repeat";
+			p.pad.style.backgroundImage = "url('"+jscolor.getDir()+padImg+"')";
+			p.pad.style.backgroundRepeat = "no-repeat";
+			p.pad.style.backgroundPosition = "0 0";
+
+			// place pointers
+			redrawPad();
+			redrawSld();
+
+			jscolor.picker.owner = THIS;
+			document.getElementsByTagName('body')[0].appendChild(p.boxB);
+		}
+
+
+		function getPickerDims(o) {
+			var dims = [
+				2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[0] +
+					(o.slider ? 2*o.pickerInset + 2*jscolor.images.arrow[0] + jscolor.images.sld[0] : 0),
+				o.pickerClosable ?
+					4*o.pickerInset + 3*o.pickerFace + jscolor.images.pad[1] + o.pickerButtonHeight :
+					2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[1]
+			];
+			return dims;
+		}
+
+
+		function redrawPad() {
+			// redraw the pad pointer
+			switch(modeID) {
+				case 0: var yComponent = 1; break;
+				case 1: var yComponent = 2; break;
+			}
+			var x = Math.round((THIS.hsv[0]/6) * (jscolor.images.pad[0]-1));
+			var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.pad[1]-1));
+			jscolor.picker.padM.style.backgroundPosition =
+				(THIS.pickerFace+THIS.pickerInset+x - Math.floor(jscolor.images.cross[0]/2)) + 'px ' +
+				(THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.cross[1]/2)) + 'px';
+
+			// redraw the slider image
+			var seg = jscolor.picker.sld.childNodes;
+
+			switch(modeID) {
+				case 0:
+					var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
+					for(var i=0; i<seg.length; i+=1) {
+						seg[i].style.backgroundColor = 'rgb('+
+							(rgb[0]*(1-i/seg.length)*100)+'%,'+
+							(rgb[1]*(1-i/seg.length)*100)+'%,'+
+							(rgb[2]*(1-i/seg.length)*100)+'%)';
+					}
+					break;
+				case 1:
+					var rgb, s, c = [ THIS.hsv[2], 0, 0 ];
+					var i = Math.floor(THIS.hsv[0]);
+					var f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i);
+					switch(i) {
+						case 6:
+						case 0: rgb=[0,1,2]; break;
+						case 1: rgb=[1,0,2]; break;
+						case 2: rgb=[2,0,1]; break;
+						case 3: rgb=[2,1,0]; break;
+						case 4: rgb=[1,2,0]; break;
+						case 5: rgb=[0,2,1]; break;
+					}
+					for(var i=0; i<seg.length; i+=1) {
+						s = 1 - 1/(seg.length-1)*i;
+						c[1] = c[0] * (1 - s*f);
+						c[2] = c[0] * (1 - s);
+						seg[i].style.backgroundColor = 'rgb('+
+							(c[rgb[0]]*100)+'%,'+
+							(c[rgb[1]]*100)+'%,'+
+							(c[rgb[2]]*100)+'%)';
+					}
+					break;
+			}
+		}
+
+
+		function redrawSld() {
+			// redraw the slider pointer
+			switch(modeID) {
+				case 0: var yComponent = 2; break;
+				case 1: var yComponent = 1; break;
+			}
+			var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.sld[1]-1));
+			jscolor.picker.sldM.style.backgroundPosition =
+				'0 ' + (THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.arrow[1]/2)) + 'px';
+		}
+
+
+		function isPickerOwner() {
+			return jscolor.picker && jscolor.picker.owner === THIS;
+		}
+
+
+		function blurTarget() {
+			if(valueElement === target) {
+				THIS.importColor();
+			}
+			if(THIS.pickerOnfocus) {
+				THIS.hidePicker();
+			}
+		}
+
+
+		function blurValue() {
+			if(valueElement !== target) {
+				THIS.importColor();
+			}
+		}
+
+
+		function setPad(e) {
+			var mpos = jscolor.getRelMousePos(e);
+			var x = mpos.x - THIS.pickerFace - THIS.pickerInset;
+			var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
+			switch(modeID) {
+				case 0: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), 1 - y/(jscolor.images.pad[1]-1), null, leaveSld); break;
+				case 1: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), null, 1 - y/(jscolor.images.pad[1]-1), leaveSld); break;
+			}
+		}
+
+
+		function setSld(e) {
+			var mpos = jscolor.getRelMousePos(e);
+			var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
+			switch(modeID) {
+				case 0: THIS.fromHSV(null, null, 1 - y/(jscolor.images.sld[1]-1), leavePad); break;
+				case 1: THIS.fromHSV(null, 1 - y/(jscolor.images.sld[1]-1), null, leavePad); break;
+			}
+		}
+
+
+		function dispatchImmediateChange() {
+			if (THIS.onImmediateChange) {
+				var callback;
+				if (typeof THIS.onImmediateChange === 'string') {
+					callback = new Function (THIS.onImmediateChange);
+				} else {
+					callback = THIS.onImmediateChange;
+				}
+				callback.call(THIS);
+			}
+		}
+
+
+		var THIS = this;
+		var modeID = this.pickerMode.toLowerCase()==='hvs' ? 1 : 0;
+		var abortBlur = false;
+		var
+			valueElement = jscolor.fetchElement(this.valueElement),
+			styleElement = jscolor.fetchElement(this.styleElement);
+		var
+			holdPad = false,
+			holdSld = false,
+			touchOffset = {};
+		var
+			leaveValue = 1<<0,
+			leaveStyle = 1<<1,
+			leavePad = 1<<2,
+			leaveSld = 1<<3;
+
+		// target
+		jscolor.addEvent(target, 'focus', function() {
+			if(THIS.pickerOnfocus) { THIS.showPicker(); }
+		});
+		jscolor.addEvent(target, 'blur', function() {
+			if(!abortBlur) {
+				window.setTimeout(function(){ abortBlur || blurTarget(); abortBlur=false; }, 0);
+			} else {
+				abortBlur = false;
+			}
+		});
+
+		// valueElement
+		if(valueElement) {
+			var updateField = function() {
+				THIS.fromString(valueElement.value, leaveValue);
+				dispatchImmediateChange();
+			};
+			jscolor.addEvent(valueElement, 'keyup', updateField);
+			jscolor.addEvent(valueElement, 'input', updateField);
+			jscolor.addEvent(valueElement, 'blur', blurValue);
+			valueElement.setAttribute('autocomplete', 'off');
+		}
+
+		// styleElement
+		if(styleElement) {
+			styleElement.jscStyle = {
+				backgroundImage : styleElement.style.backgroundImage,
+				backgroundColor : styleElement.style.backgroundColor,
+				color : styleElement.style.color
+			};
+		}
+
+		// require images
+		switch(modeID) {
+			case 0: jscolor.requireImage('hs.png'); break;
+			case 1: jscolor.requireImage('hv.png'); break;
+		}
+		jscolor.requireImage('cross.gif');
+		jscolor.requireImage('arrow.gif');
+
+		this.importColor();
+	}
+
+};
+
+
+jscolor.install();
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner.php
new file mode 100644
index 000000000..4b4c79961
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml;
+
+/**
+ * Banner grid container
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Banner extends \Magento\Backend\Block\Widget\Grid\Container
+{
+    /**
+     * Internal constructor, that is called from real constructor
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_controller = 'adminhtml_banner';
+        $this->_blockGroup = 'WeltPixel_OwlCarouselSlider';
+        $this->_headerText = __('Banners');
+        $this->_addButtonLabel = __('Add New Banner');
+
+        parent::_construct();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit.php
new file mode 100644
index 000000000..e1168a409
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit.php
@@ -0,0 +1,142 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner;
+
+/**
+ * Banner block edit form container.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Edit extends \Magento\Backend\Block\Widget\Form\Container
+{
+    /**
+     * _construct
+     * @return void
+     */
+    protected function _construct()
+    {
+        parent::_construct();
+
+        $this->_objectId   = 'id';
+        $this->_blockGroup = 'WeltPixel_OwlCarouselSlider';
+        $this->_controller = 'adminhtml_banner';
+
+        $this->buttonList->update('save', 'label', __('Save Banner'));
+
+        if ($this->getRequest()->getParam('loaded_slider_id')) {
+            $this->buttonList->remove('back');
+            $this->buttonList->remove('save');
+            $this->buttonList->remove('delete');
+            $this->buttonList->add(
+                'close_window',
+                [
+                    'label'   => __('Close Window'),
+                    'onclick' => 'window.close();',
+                ],
+                10
+            );
+
+            $this->buttonList->add(
+                'save_and_continue',
+                [
+                    'label'   => __('Save and Continue Edit'),
+                    'class'   => 'save',
+                    'onclick' => 'winSaveAndContinueEdit()',
+                ],
+                10
+            );
+
+            $this->buttonList->add(
+                'save_and_close',
+                [
+                    'label'   => __('Save and Close'),
+                    'class'   => 'save_and_close',
+                    'onclick' => 'winSaveAndCloseWindow()',
+                ],
+                10
+            );
+
+            $this->_formScripts[] = "
+				require(['jquery'], function($){
+					$(document).ready(function(){
+						var input = $('<input class=\"custom-button-submit\" type=\"submit\" hidden=\"true\" />');
+						$(edit_form).append(input);
+
+						window.winSaveAndContinueEdit = function (){
+							edit_form.action = '" . $this->getWinSaveAndContinueUrl() . "';
+							$('.custom-button-submit').trigger('click');
+				        }
+			    		window.winSaveAndCloseWindow = function (){
+			    			edit_form.action = '" . $this->getWinSaveAndCloseWindowUrl() . "';
+							$('.custom-button-submit').trigger('click');
+			            }
+					});
+				});
+			";
+
+            $bannerId = $this->getRequest()->getParam('id');
+
+            if ($bannerId) {
+                $this->_formScripts[] = 'window.id = ' . $bannerId . ';';
+            }
+
+        } else {
+            $this->buttonList->add(
+                'save_and_continue',
+                [
+                    'label' => __('Save and Continue Edit'),
+                    'class' => 'save',
+                    'data_attribute' => [
+                        'mage-init'  => ['button' => ['event' => 'saveAndContinueEdit', 'target' => '#edit_form']]
+                    ],
+                ],
+                10
+            );
+        }
+
+        if ($this->getRequest()->getParam('saveandclose')) {
+            $this->_formScripts[] = 'window.close();';
+        }
+    }
+
+    /**
+     * Get save and continue edit url.
+     *
+     * @return string
+     */
+    protected function getWinSaveAndContinueUrl()
+    {
+        return $this->getUrl(
+            '*/*/save',
+            [
+                '_current' => true,
+                'back'     => 'edit',
+                'tab'      => '{{tab_id}}',
+                'id'       => $this->getRequest()->getParam('id'),
+                'loaded_slider_id' => $this->getRequest()->getParam('loaded_slider_id'),
+            ]
+        );
+    }
+
+    /**
+     * Get save and close window Url.
+     *
+     * @return string
+     */
+    protected function getWinSaveAndCloseWindowUrl()
+    {
+        return $this->getUrl(
+            '*/*/save',
+            [
+                '_current' => true,
+                'back'     => 'edit',
+                'tab'      => '{{tab_id}}',
+                'id'       => $this->getRequest()->getParam('id'),
+                'loaded_slider_id' => $this->getRequest()->getParam('loaded_slider_id'),
+                'saveandclose'     => 1,
+            ]
+        );
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Form.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Form.php
new file mode 100644
index 000000000..502335722
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Form.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Edit;
+
+/**
+ * Adminhtml locator edit form block.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Form extends \Magento\Backend\Block\Widget\Form\Generic
+{
+    protected function _prepareForm()
+    {
+        /** @var \Magento\Framework\Data\Form $form */
+        $form = $this->_formFactory->create(
+            [
+                'data' => [
+                    'id'      => 'edit_form',
+                    'action'  => $this->getUrl('*/*/save'),
+                    'method'  => 'post',
+                    'enctype' => 'multipart/form-data',
+                ],
+            ]
+        );
+        $form->setUseContainer(true);
+        $this->setForm($form);
+
+        return parent::_prepareForm();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tab/Banner.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tab/Banner.php
new file mode 100644
index 000000000..3b65afc82
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tab/Banner.php
@@ -0,0 +1,611 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Edit\Tab;
+
+use WeltPixel\OwlCarouselSlider\Model\Status;
+
+/**
+ * Banner Edit tab.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Banner extends \Magento\Backend\Block\Widget\Form\Generic
+    implements \Magento\Backend\Block\Widget\Tab\TabInterface
+{
+    /**
+     * @var \Magento\Framework\DataObjectFactory
+     */
+    protected $_objectFactory;
+
+    /**
+     * slider factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\SliderFactory
+     */
+    protected $_sliderFactory;
+
+    /**
+     * @var \WeltPixel\OwlCarouselSlider\Model\Banner
+     */
+    protected $_bannerModel;
+
+    /**
+     * available status.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\Status
+     */
+    private $_status;
+
+    /**
+     * constructor.
+     *
+     * @param \Magento\Backend\Block\Template\Context                                  $context
+     * @param \Magento\Framework\Registry                                              $registry
+     * @param \Magento\Framework\Data\FormFactory                                      $formFactory
+     * @param \Magento\Framework\DataObjectFactory                                     $objectFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\Banner                                $banner
+     * @param \WeltPixel\OwlCarouselSlider\Model\SliderFactory                         $sliderFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\Status                                $status
+     * @param array                                                                    $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Template\Context $context,
+        \Magento\Framework\Registry $registry,
+        \Magento\Framework\Data\FormFactory $formFactory,
+        \Magento\Framework\DataObjectFactory $objectFactory,
+        \WeltPixel\OwlCarouselSlider\Model\Banner $bannerModel,
+        \WeltPixel\OwlCarouselSlider\Model\SliderFactory $sliderFactory,
+        \WeltPixel\OwlCarouselSlider\Model\Status $status,
+        array $data = []
+    ) {
+        parent::__construct($context, $registry, $formFactory, $data);
+
+        $this->_objectFactory = $objectFactory;
+        $this->_bannerModel   = $bannerModel;
+        $this->_sliderFactory = $sliderFactory;
+        $this->_status        = $status;
+    }
+
+    /**
+     * prepare layout.
+     *
+     * @return $this
+     */
+    protected function _prepareLayout()
+    {
+        $pageTitle = $this->getPageTitle();
+
+        $this->getLayout()->getBlock('page.title')->setPageTitle($pageTitle);
+
+        \Magento\Framework\Data\Form::setFieldsetElementRenderer(
+            $this->getLayout()->createBlock(
+                'WeltPixel\OwlCarouselSlider\Block\Adminhtml\Form\Renderer\Fieldset\Element', $this->getNameInLayout()
+                .'_fieldset_element'
+            )
+        );
+
+        return $this;
+    }
+
+    /**
+     * Prepare form.
+     *
+     * @return $this
+     */
+    protected function _prepareForm()
+    {
+        $dataObj = $this->_objectFactory->create();
+
+        /**
+         * @var \WeltPixel\OwlCarouselSlider\Model\Banner $bannerModel
+         */
+        $bannerModel = $this->_coreRegistry->registry('banner');
+
+        if ($sliderId = $this->getRequest()->getParam('loaded_slider_id')) {
+            $bannerModel->setSliderId($sliderId);
+        }
+
+        $dataObj->addData($bannerModel->getData());
+
+        /** @var \Magento\Framework\Data\Form $form */
+        $form = $this->_formFactory->create();
+
+        $form->setHtmlIdPrefix($this->_bannerModel->getFormFieldHtmlIdPrefix());
+
+        $htmlIdPrefix = $form->getHtmlIdPrefix();
+
+        $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Banner Details')]);
+        
+        if ($bannerModel->getId()) {
+            $fieldset->addField('id', 'hidden', ['name' => 'id']);
+        }
+
+        $elements = [];
+
+        $elements['title'] = $fieldset->addField(
+            'title',
+            'text',
+            [
+                'name'     => 'title',
+                'label'    => __('Title'),
+                'title'    => __('Title'),
+                'required' => true,
+            ]
+        );
+
+        $elements['show_title'] = $fieldset->addField(
+            'show_title',
+            'select',
+            [
+                'name'     => 'show_title',
+                'label'    => __('Show Title'),
+                'title'    => __('Show Title'),
+                'required' => false,
+                'options'  => [
+                    1 => __('Yes'),
+                    0 => __('No'),
+                ]
+            ]
+        );
+
+        $elements['description'] = $fieldset->addField(
+            'description',
+            'text',
+            [
+                'name'     => 'description',
+                'label'    => __('Description'),
+                'title'    => __('Description'),
+                'required' => false,
+            ]
+        );
+
+        $elements['show_description'] = $fieldset->addField(
+            'show_description',
+            'select',
+            [
+                'name'     => 'show_description',
+                'label'    => __('Show Description'),
+                'title'    => __('Show Description'),
+                'required' => false,
+                'options'  => [
+                    1 => __('Yes'),
+                    0 => __('No'),
+                ]
+            ]
+        );
+
+        $elements['status'] = $fieldset->addField(
+            'status',
+            'select',
+            [
+                'label'    => __('Status'),
+                'title'    => __('Banner Status'),
+                'name'     => 'status',
+                'required' => false,
+                'options'  => $this->_status->getAllAvailableStatuses(),
+            ]
+        );
+
+        $slider = $this->_sliderFactory->create()->load($sliderId);
+
+        if ($slider->getId()) {
+            $elements['slider_id'] = $fieldset->addField(
+                'slider_id',
+                'select',
+                [
+                    'label'    => __('Slider'),
+                    'name'     => 'slider_id',
+                    'required' => false,
+                    'values'   => [
+                        [
+                            'value' => $slider->getId(),
+                            'label' => $slider->getTitle(),
+                        ],
+                    ],
+                    'note'    => 'Select to which Slider you wish to assign current banner. The assignments of banner can be done also later from Sliders Manager > Edit or Add New 
+                    Slider > Slider Banners grid.',
+                ]
+            );
+        } else {
+            $elements['slider_id'] = $fieldset->addField(
+                'slider_id',
+                'select',
+                [
+                    'label'    => __('Slider'),
+                    'name'     => 'slider_id',
+                    'required' => false,
+                    'values'   => $bannerModel->getAvailableSliders(),
+                    'note'    => 'Select to which Slider you wish to assign current banner. The assignments of banner can be done also later from Sliders Manager > Edit or Add New 
+                    Slider > Slider Banners grid.',
+                ]
+            );
+        }
+
+        $elements['url'] = $fieldset->addField(
+            'url',
+            'text',
+            [
+                'title'    => __('URL'),
+                'label'    => __('URL'),
+                'name'     => 'url',
+                'required' => false,
+                'note'    => 'Set the URL where the banner/button should link when clicked on. URL Note 1: set the URL without your store base url, ex. /women.html; URL Note 2: if 
+                "Text Button" option is filled, URL will be linked to the button instead of banner.',
+            ]
+        );
+
+        if($this->showGaFields()){
+            $elements['ga_promo_id'] = $fieldset->addField(
+                'ga_promo_id',
+                'text',
+                [
+                    'title'    => __('GA Promo ID'),
+                    'label'    => __('GA Promo ID'),
+                    'name'     => 'ga_promo_id',
+                    'required' => false
+                ]
+            );
+            $elements['ga_promo_name'] = $fieldset->addField(
+                'ga_promo_name',
+                'text',
+                [
+                    'title'    => __('GA Promo Name'),
+                    'label'    => __('GA Promo Name'),
+                    'name'     => 'ga_promo_name',
+                    'required' => false
+                ]
+            );
+            $elements['ga_promo_creative'] = $fieldset->addField(
+                'ga_promo_creative',
+                'text',
+                [
+                    'title'    => __('GA Promo Creative'),
+                    'label'    => __('GA Promo Creative'),
+                    'name'     => 'ga_promo_creative',
+                    'required' => false
+                ]
+            );
+            $elements['ga_promo_position'] = $fieldset->addField(
+                'ga_promo_position',
+                'text',
+                [
+                    'title'    => __('GA Promo Position'),
+                    'label'    => __('GA Promo Position'),
+                    'name'     => 'ga_promo_position',
+                    'required' => false
+                ]
+            );
+        }
+
+
+
+        $elements['target'] = $fieldset->addField(
+            'target',
+            'select',
+            [
+                'label'  => __('Target'),
+                'name'   => 'target',
+                'values' => [
+                    [
+                        'value' => '_self',
+                        'label' => __('Same Window'),
+                    ],
+                    [
+                        'value' => '_blank',
+                        'label' => __('New Window Tab'),
+                    ],
+                ],
+                'required' => false,
+                'note'    => 'Choose how the URL should be opened: same window or in a new tab.',
+            ]
+        );
+
+        $elements['button_text'] = $fieldset->addField(
+            'button_text',
+            'text',
+            [
+                'title'    => __('Button Text'),
+                'label'    => __('Button Text'),
+                'name'     => 'button_text',
+                'required' => false,
+                'note'     => __('Insert the text which is displayed on the button. To display the button make sure you fill the URL filed also.')
+            ]
+        );
+
+        $elements['banner_type'] = $fieldset->addField(
+            'banner_type',
+            'select',
+            [
+                'label'    => __('Banner Type'),
+                'name'     => 'banner_type',
+                'values'   => $bannerModel->getAvailableBannerType(),
+                'required' => false,
+                'note'     => 'Choose banner type: Image, Video or Custom. In Custom you can insert HTML content.',
+            ]
+        );
+
+        $elements['video'] = $fieldset->addField(
+            'video',
+            'textarea',
+            [
+                'title'    => __('Video'),
+                'label'    => __('Video'),
+                'name'     => 'video',
+                'required' => false,
+            ]
+        );
+
+        $elements['image'] = $fieldset->addField(
+            'image',
+            'image',
+            [
+                'title'    => __('Image'),
+                'label'    => __('Image'),
+                'name'     => 'image',
+                'note'     => 'Accepted images: jpg, jpeg, gif, png',
+                'required' => false,
+            ]
+        );
+
+
+        $elements['mobile_image'] = $fieldset->addField(
+            'mobile_image',
+            'label',
+            [
+                'title'    => __('Mobile Image'),
+                'label'    => __('Mobile Image'),
+                'name'     => 'mobile_image',
+                'required' => false,
+                'after_element_html' => '<b style="font-size: 16px"><a style="font-size: 16px" target="_blank" href="https://www.weltpixel.com/owl-carousel-and-slider.html">Upgrade to Pro version</a> to enable this functionality.</b>'
+            ]
+        );
+
+
+        $elements['custom'] = $fieldset->addField(
+            'custom',
+            'textarea',
+            [
+                'title'    => __('Create Custom Banner here'),
+                'label'    => __('Create Custom Banner here'),
+                'name'     => 'custom',
+                'required' => false,
+            ]
+        );
+
+        $elements['alt_text'] = $fieldset->addField(
+            'alt_text',
+            'text',
+            [
+                'title'    => __('Alt Text'),
+                'label'    => __('Alt Text'),
+                'name'     => 'alt_text',
+                'required' => false,
+                'note'     => 'Specify an alternate text for image in case the image cannot be displayed.',
+            ]
+        );
+
+        if ($bannerModel->getId()) {
+            $elements['bannerclass'] = $fieldset->addField(
+                'bannerclass',
+                'label',
+                [
+                    'title' => __('Banner Class'),
+                    'label' => __('Banner Class'),
+                    'name' => 'banner_class',
+                    'value' => 'banner-' . $bannerModel->getId(),
+                    'note' => __('Wrapper class name of the current banner. It can be used in Custom CSS field to style each banner from the slider. This is displayed only after you 
+                    saved the banner.')
+                ]
+            );
+        }
+
+        $elements['custom_content'] = $fieldset->addField(
+            'custom_content',
+            'textarea',
+            [
+                'title'    => __('Custom HTML Content'),
+                'label'    => __('Custom HTML Content'),
+                'name'     => 'custom_content',
+                'required' => false,
+            ]
+        );
+    
+        $elements['custom_css'] = $fieldset->addField(
+            'custom_css',
+            'textarea',
+            [
+                'title'    => __('Custom CSS'),
+                'label'    => __('Custom CSS'),
+                'name'     => 'custom_css',
+                'required' => false,
+                'note'     => 'Insert your custom CSS style.',
+            ]
+        );
+        
+        $dateFormat = $this->_localeDate->getDateFormatWithLongYear();
+        $timeFormat = $this->_localeDate->getTimeFormat();
+        
+        if ($dataObj->hasData('valid_from')) {
+            $datetime = new \DateTime($dataObj->getData('valid_from'));
+            $dataObj->setData('valid_from',
+                $datetime->setTimezone(new \DateTimeZone($this->_localeDate->getConfigTimezone())));
+        }
+
+        if ($dataObj->hasData('valid_to')) {
+            $datetime = new \DateTime($dataObj->getData('valid_to'));
+            $dataObj->setData('valid_to',
+                $datetime->setTimezone(new \DateTimeZone($this->_localeDate->getConfigTimezone())));
+        }
+
+        $style = 'color: #000;background-color: #fff; font-weight: bold; font-size: 13px;';
+        $elements['valid_from'] = $fieldset->addField(
+            'valid_from',
+            'date',
+            [
+                'name'        => 'valid_from',
+                'label'       => __('Banner Valid From'),
+                'title'       => __('Valid From'),
+                'required'    => true,
+                'readonly'    => true,
+                'style'       => $style,
+                'class'       => 'required-entry',
+                'date_format' => $dateFormat,
+                'time_format' => $timeFormat,
+                'note'        => implode(' ', [$dateFormat, $timeFormat]) . '<br/>The banner is displayed from selected date and time.',
+            ]
+        );
+
+        $elements['valid_to'] = $fieldset->addField(
+            'valid_to',
+            'date',
+            [
+                'name'        => 'valid_to',
+                'label'       => __('Banner Valid To'),
+                'title'       => __('Valid To'),
+                'required'    => true,
+                'readonly'    => true,
+                'style'       => $style,
+                'class'       => 'required-entry',
+                'date_format' => $dateFormat,
+                'time_format' => $timeFormat,
+                'note'        => implode(' ', [$dateFormat, $timeFormat]) . '<br/>The Banner is displayed until selected date and time.',
+            ]
+        );
+
+        $form->addValues($dataObj->getData());
+
+        $this->setChild(
+            'form_after',
+            $this->getLayout()->createBlock('Magento\Backend\Block\Widget\Form\Element\Dependence')
+                ->addFieldMap(
+                    "{$htmlIdPrefix}banner_type",
+                    'banner_type'
+                )
+                ->addFieldMap(
+                    "{$htmlIdPrefix}video",
+                    'video'
+                )
+                ->addFieldMap(
+                    "{$htmlIdPrefix}image",
+                    'image'
+                )
+                ->addFieldMap(
+                    "{$htmlIdPrefix}mobile_image",
+                    'mobile_image'
+                )
+                ->addFieldMap(
+                    "{$htmlIdPrefix}custom",
+                    'custom'
+                )
+                ->addFieldMap(
+                    "{$htmlIdPrefix}alt_text",
+                    'alt_text'
+                )
+                ->addFieldDependence(
+                    'image',
+                    'banner_type',
+                    '1'
+                )
+                ->addFieldDependence(
+                    'mobile_image',
+                    'banner_type',
+                    '1'
+                )
+                ->addFieldDependence(
+                    'alt_text',
+                    'banner_type',
+                    '1'
+                )
+                ->addFieldDependence(
+                    'video',
+                    'banner_type',
+                    '2'
+                )
+                ->addFieldDependence(
+                    'custom',
+                    'banner_type',
+                    '3'
+                )
+        );
+
+        $this->setForm($form);
+
+        return parent::_prepareForm();
+    }
+
+    /**
+     * Retrieve the banner model.
+     *
+     * @return \WeltPixel\OwlCarouselSlider\Model\Banner
+     */
+    public function getBanner()
+    {
+        return $this->_coreRegistry->registry('banner');
+    }
+
+    /**
+     * Return the page title.
+     *
+     * @return \Magento\Framework\Phrase
+     */
+    public function getPageTitle()
+    {
+        return $this->getBanner()->getId()
+            ? __("Edit Banner '%1'", $this->escapeHtml($this->getBanner()->getTitle())) : __('New Banner');
+    }
+
+    /**
+     * Prepare tab label.
+     *
+     * @return string
+     */
+    public function getTabLabel()
+    {
+        return __('Banner Details');
+    }
+
+    /**
+     * Prepare tab title.
+     *
+     * @return string
+     */
+    public function getTabTitle()
+    {
+        return __('Banner Details');
+    }
+
+    /**
+     * Can show tab in tabs.
+     *
+     * @return boolean
+     * @api
+     */
+    public function canShowTab()
+    {
+        return true;
+    }
+
+    /**
+     * Tab is hidden.
+     *
+     * @return boolean
+     * @api
+     */
+    public function isHidden()
+    {
+        return false;
+    }
+
+    /**
+     * Checks if Google Analytics Tracking for banners is enabled
+     *
+     * @return boolean
+     */
+    public function showGaFields()
+    {
+        $sysPath = 'weltpixel_owl_slider_config/general/enable_google_tracking';
+        return $this->_scopeConfig->getValue($sysPath, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tabs.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tabs.php
new file mode 100644
index 000000000..83328ad5f
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Edit/Tabs.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Edit;
+
+/**
+ * banner Tabs.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Tabs extends \Magento\Backend\Block\Widget\Tabs
+{
+    /**
+     * construct.
+     */
+    protected function _construct()
+    {
+        parent::_construct();
+        
+        $this->setId('banner_tabs');
+        $this->setDestElementId('edit_form');
+        $this->setTitle(__('Banner Information'));
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Grid.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Grid.php
new file mode 100644
index 000000000..da79e38f3
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Grid.php
@@ -0,0 +1,277 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner;
+
+/**
+ * Banner grid.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
+{
+    /**
+     * banner collection factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory
+     */
+    protected $_bannerCollectionFactory;
+
+    /**
+     * slider collection factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory
+     */
+    protected $_sliderCollectionFactory;
+
+    /**
+     * available status.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\Status
+     */
+    private $_status;
+
+    /**
+     * construct.
+     *
+     * @param \Magento\Backend\Block\Template\Context                                   $context
+     * @param \Magento\Backend\Helper\Data                                              $backendHelper
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory $bannerCollectionFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\Status                                 $status
+     * @param array                                                                     $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Template\Context $context,
+        \Magento\Backend\Helper\Data $backendHelper,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory $bannerCollectionFactory,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory $sliderCollectionFactory,
+        \WeltPixel\OwlCarouselSlider\Model\Status $status,
+        array $data = []
+    ) {
+        $this->_bannerCollectionFactory = $bannerCollectionFactory;
+        $this->_sliderCollectionFactory = $sliderCollectionFactory;
+        $this->_status = $status;
+
+        parent::__construct($context, $backendHelper, $data);
+    }
+
+    protected function _construct()
+    {
+        parent::_construct();
+
+        $this->setId('bannerGrid');
+        $this->setDefaultSort('id');
+        $this->setDefaultDir('ASC');
+        $this->setSaveParametersInSession(true);
+        $this->setUseAjax(true);
+    }
+
+    protected function _prepareCollection()
+    {
+        /** @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\Collection $collection */
+        $collection = $this->_bannerCollectionFactory->create();
+
+        $this->setCollection($collection);
+
+        return parent::_prepareCollection();
+    }
+
+    /**
+     * @return $this
+     */
+    protected function _prepareColumns()
+    {
+        $this->addColumn(
+            'id',
+            [
+                'header' => __('Banner ID'),
+                'type'   => 'number',
+                'index'  => 'id',
+                'header_css_class' => 'col-id',
+                'column_css_class' => 'col-id',
+            ]
+        );
+        
+        $this->addColumn(
+            'slider_id',
+            [
+                'header' => __('Slider ID'),
+                'type'   => 'number',
+                'index'  => 'slider_id',
+                'header_css_class' => 'col-id',
+                'column_css_class' => 'col-id',
+            ]
+        );
+
+        $this->addColumn(
+            'status',
+            [
+                'header'  => __('Status'),
+                'index'   => 'status',
+                'type'    => 'options',
+                'options' => $this->_status->getAllAvailableStatuses(),
+            ]
+        );
+
+        $this->addColumn(
+            'title',
+            [
+                'header' => __('Title'),
+                'index'  => 'title',
+                'width'  => '50px',
+            ]
+        );
+
+        $this->addColumn(
+            'image',
+            [
+                'header'   => __('Image'),
+                'width'    => '50px',
+                'filter'   => false,
+                'renderer' => 'WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Helper\Renderer\Image',
+            ]
+        );
+
+        $this->addColumn(
+            'mobile_image',
+            [
+                'header'   => __('Mobile Image'),
+                'width'    => '50px',
+                'filter'   => false,
+                'renderer' => 'WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Helper\Renderer\MobileImage',
+            ]
+        );
+
+        $this->addColumn(
+            'valid_from',
+            [
+                'header'   => __('Valid From'),
+                'type'     => 'datetime',
+                'index'    => 'valid_from',
+                'width'    => '50px',
+                'timezone' => true,
+            ]
+        );
+
+        $this->addColumn(
+            'valid_to',
+            [
+                'header'   => __('Valid To'),
+                'type'     => 'datetime',
+                'index'    => 'valid_to',
+                'width'    => '50px',
+                'timezone' => true,
+            ]
+        );
+
+        $this->addColumn(
+            'edit',
+            [
+                'header'  => __('Edit'),
+                'type'    => 'action',
+                'getter'  => 'getId',
+                'actions' => [
+                    [
+                        'caption' => __('Edit'),
+                        'url'     => ['base' => '*/*/edit'],
+                        'field'   => 'id',
+                    ],
+                ],
+                'filter'   => false,
+                'sortable' => false,
+                'index'    => 'stores',
+                'header_css_class' => 'col-action',
+                'column_css_class' => 'col-action',
+            ]
+        );
+        $this->addExportType('*/*/exportCsv', __('CSV'));
+        $this->addExportType('*/*/exportXml', __('XML'));
+        $this->addExportType('*/*/exportExcel', __('Excel'));
+
+        return parent::_prepareColumns();
+    }
+
+    /**
+     * Get slider available option.
+     *
+     * @return array
+     */
+    public function getSliderAvailableOption()
+    {
+        $option = [];
+
+        $sliderCollection = $this->_sliderCollectionFactory->create()->addFieldToSelect(['title']);
+
+        if (count($sliderCollection)) {
+            foreach ($sliderCollection as $slider) {
+                $option[$slider->getId()] = $slider->getTitle();
+            }
+        }
+
+        return $option;
+    }
+
+    /**
+     * Prepare grid massaction actions
+     *
+     * @return $this
+     */
+    protected function _prepareMassaction()
+    {
+        $this->setMassactionIdField('entity_id');
+        
+        $this->getMassactionBlock()->setFormFieldName('banner');
+
+        $this->getMassactionBlock()->addItem(
+            'delete',
+            [
+                'label'   => __('Delete'),
+                'url'     => $this->getUrl('weltowlcarousel/*/massDelete'),
+                'confirm' => __('Are you sure?'),
+            ]
+        );
+
+        $status = $this->_status->getAllAvailableStatuses();
+        array_unshift($status, ['label' => '', 'value' => '']);
+        $this->getMassactionBlock()->addItem(
+            'status',
+            [
+                'label' => __('Change Status'),
+                'url'   => $this->getUrl('weltowlcarousel/*/massStatus', ['_current' => true]),
+                'additional' => [
+                    'visibility' => [
+                        'name'   => 'status',
+                        'type'   => 'select',
+                        'class'  => 'required-entry',
+                        'label'  => __('Status'),
+                        'values' => $status,
+                    ],
+                ],
+            ]
+        );
+
+        return $this;
+    }
+
+    /**
+     * Retrieve grid reload url
+     *
+     * @return string;
+     */
+    public function getGridUrl()
+    {
+        return $this->getUrl('*/*/grid', ['_current' => true]);
+    }
+
+    /**
+     * Return row url for js event handlers
+     *
+     * @param \Magento\Catalog\Model\Product|\Magento\Framework\DataObject $row
+     * @return string
+     */
+    public function getRowUrl($row)
+    {
+        return $this->getUrl('*/*/edit', ['id' => $row->getId()]);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/Image.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/Image.php
new file mode 100644
index 000000000..3137d312c
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/Image.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Helper\Renderer;
+
+/**
+ * Image renderer.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Image extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
+{
+    /**
+     * Store manager.
+     *
+     * @var \Magento\Store\Model\StoreManagerInterface
+     */
+    protected $_storeManager;
+
+    /**
+     * Banner factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\BannerFactory
+     */
+    protected $_bannerFactory;
+
+    /**
+     * [__construct description].
+     *
+     * @param \Magento\Backend\Block\Context                    $context
+     * @param \Magento\Store\Model\StoreManagerInterface        $storeManager
+     * @param \WeltPixel\OwlCarouselSlider\Model\BannerFactory  $bannerFactory
+     * @param array                                             $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Context $context,
+        \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \WeltPixel\OwlCarouselSlider\Model\BannerFactory $bannerFactory,
+        array $data = []
+    ) {
+        parent::__construct($context, $data);
+
+        $this->_storeManager  = $storeManager;
+        $this->_bannerFactory = $bannerFactory;
+    }
+
+    /**
+     * Render action.
+     *
+     * @param \Magento\Framework\DataObject $row
+     *
+     * @return string
+     */
+    public function render(\Magento\Framework\DataObject $row)
+    {
+        $banner = $this->_bannerFactory->create()->load($row->getId());
+
+        $imageSrc = $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA)
+            . $banner->getImage();
+
+        return '<image width="150" height="50" src ="' . $imageSrc . '" alt="' . $banner->getImage() . '" >';
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/MobileImage.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/MobileImage.php
new file mode 100644
index 000000000..aa8612c48
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Banner/Helper/Renderer/MobileImage.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Helper\Renderer;
+
+/**
+ * Image renderer.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class MobileImage extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
+{
+    /**
+     * Render action.
+     *
+     * @param \Magento\Framework\DataObject $row
+     *
+     * @return string
+     */
+    public function render(\Magento\Framework\DataObject $row)
+    {
+        return '<b style="font-size: 16px"><a style="font-size: 16px" target="_blank" href="https://www.weltpixel.com/owl-carousel-and-slider.html">Upgrade to Pro version</a><br/>to enable this functionality.</b>';
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Form/Renderer/Fieldset/Element.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Form/Renderer/Fieldset/Element.php
new file mode 100644
index 000000000..5f44d64b2
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Form/Renderer/Fieldset/Element.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Form\Renderer\Fieldset;
+
+/**
+ * Fieldset element renderer.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Element extends \Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Element
+{
+    /**
+     * Initialize block template.
+     */
+    protected $_template = 'WeltPixel_OwlCarouselSlider::form/renderer/fieldset/element.phtml';
+
+    /**
+     * Retrieve the element name.
+     *
+     * @return string
+     */
+    public function getElementName()
+    {
+        return $this->getElement()->getName();
+    }
+
+    /**
+     * Retrieve element label html.
+     *
+     * @return string
+     */
+    public function getElementLabelHtml()
+    {
+        $element = $this->getElement();
+        $label   = $element->getLabel();
+
+        if (!empty($label)) {
+            $element->setLabel(__($label));
+        }
+
+        return $element->getLabelHtml();
+    }
+
+    /**
+     * Retrieve the element html.
+     *
+     * @return string
+     */
+    public function getElementHtml()
+    {
+        return $this->getElement()->getElementHtml();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider.php
new file mode 100644
index 000000000..ce1c34f1f
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml;
+
+/**
+ * Slider grid container
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Slider extends \Magento\Backend\Block\Widget\Grid\Container
+{
+    /**
+     * Internal constructor, that is called from real constructor
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_controller = 'adminhtml_slider';
+        $this->_blockGroup = 'WeltPixel_OwlCarouselSlider';
+        $this->_headerText = __('Sliders');
+        $this->_addButtonLabel = __('Add New Slider');
+        
+        parent::_construct();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit.php
new file mode 100644
index 000000000..e6985162c
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit.php
@@ -0,0 +1,131 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider;
+
+/**
+ * Slider block edit form container.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Edit extends \Magento\Backend\Block\Widget\Form\Container
+{
+    /**
+     * Core registry.
+     *
+     * @var \Magento\Framework\Registry
+     */
+    protected $_coreRegistry;
+
+    /**
+     * @param Context $context
+     * @param array   $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Widget\Context $context,
+        \Magento\Framework\Registry $registry,
+        array $data = []
+    ) {
+        $this->_coreRegistry = $registry;
+        
+        parent::__construct($context, $data);
+    }
+    protected function _construct()
+    {
+        $this->_objectId   = 'id';
+        $this->_blockGroup = 'WeltPixel_OwlCarouselSlider';
+        $this->_controller = 'adminhtml_slider';
+
+        parent::_construct();
+
+        $this->buttonList->update('save', 'label', __('Save Slider'));
+        $this->buttonList->update('delete', 'label', __('Delete'));
+
+        if ($this->getSlider()->getId()) {
+            $this->buttonList->add(
+                'create_banner',
+                [
+                    'label'   => __('Create Banner'),
+                    'class'   => 'add',
+                    'onclick' => 'openBannerPopup(\''.$this->getCreateBannerUrl().'\')',
+                ],
+                1
+            );
+        }
+
+        $this->buttonList->add(
+            'save_and_continue',
+            [
+                'label' => __('Save and Continue Edit'),
+                'class' => 'save',
+                'data_attribute' => [
+                    'mage-init' => [
+                        'button' => [
+                            'event' => 'saveAndContinueEdit',
+                            'target' => '#edit_form'
+                        ],
+                    ],
+                ],
+            ],
+            10
+        );
+
+        $this->_formScripts[] = "
+			require(['jquery'], function($){
+				window.openBannerPopup = function (url) {
+				
+                    var left = ($(document).width()-1000)/2, height= $(document).height(),
+                        
+                        open_popup = window.open(url, '_blank','width=1000,resizable=1,scrollbars=1,toolbar=1,'+'left='
+                            +left+',height='+height),
+                        
+                        windowFocusHandle = function(){
+                            if (open_popup.closed) {
+                                if (typeof bannerGridJsObject !== 'undefined' && open_popup.id) {
+                                    bannerGridJsObject.reloadParams['banner[]'].push(open_popup.id + '');
+                                    $(edit_form.slider_banner).val($(edit_form.slider_banner).val() + '&' 
+                                    + open_popup.id + '=' + Base64.encode('sort_order =0'));
+                                    bannerGridJsObject.setPage(open_popup.id);
+                                }
+                                $(window).off('focus', windowFocusHandle);
+                            } else {
+                                $(open_popup).trigger('focus');
+                                open_popup.alert('" . __('You have to save the banner and close this window!') . "');
+                            }
+                        }
+                        
+                        $(window).focus(windowFocusHandle);
+                    }
+			});
+		";
+    }
+
+    public function getSlider()
+    {
+        return $this->_coreRegistry->registry('slider');
+    }
+
+    /**
+     * Retrieve the save and continue edit Url.
+     *
+     * @return string
+     */
+    protected function _getSaveAndContinueUrl()
+    {
+        return $this->getUrl(
+            '*/*/save',
+            ['_current' => true, 'back' => 'edit', 'tab' => '{{tab_id}}']
+        );
+    }
+
+    /**
+     * get create banner url.
+     *
+     * @return string
+     */
+    public function getCreateBannerUrl()
+    {
+        return $this->getUrl('*/banner/new', ['current_slider_id' => $this->getSlider()->getId()]);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Form.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Form.php
new file mode 100644
index 000000000..e45207566
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Form.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit;
+
+/**
+ * Adminhtml locator edit form block.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Form extends \Magento\Backend\Block\Widget\Form\Generic
+{
+    protected function _prepareForm()
+    {
+        /** @var \Magento\Framework\Data\Form $form */
+        $form = $this->_formFactory->create(
+            [
+                'data' => [
+                    'id'      => 'edit_form',
+                    'action'  => $this->getUrl('*/*/save'),
+                    'method'  => 'post',
+                    'enctype' => 'multipart/form-data',
+                ],
+            ]
+        );
+        $form->setUseContainer(true);
+        $this->setForm($form);
+
+        return parent::_prepareForm();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Banners.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Banners.php
new file mode 100644
index 000000000..fa742239c
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Banners.php
@@ -0,0 +1,317 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tab;
+
+use WeltPixel\OwlCarouselSlider\Model\Status;
+
+/**
+ * Banners tab.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Banners extends \Magento\Backend\Block\Widget\Grid\Extended
+{
+    /**
+     * banner factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory
+     */
+    protected $_bannerCollectionFactory;
+
+    /**
+     * available status.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\Status
+     */
+    private $_status;
+
+    /**
+     * [__construct description].
+     *
+     * @param \Magento\Backend\Block\Template\Context                                   $context
+     * @param \Magento\Backend\Helper\Data                                              $backendHelper
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory $bannerCollectionFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\Status                                 $status
+     * @param array                                                                     $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Template\Context $context,
+        \Magento\Backend\Helper\Data $backendHelper,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory $bannerCollectionFactory,
+        \WeltPixel\OwlCarouselSlider\Model\Status $status,
+        array $data = []
+    ) {
+        parent::__construct($context, $backendHelper, $data);
+
+        $this->_bannerCollectionFactory = $bannerCollectionFactory;
+        $this->_status = $status;
+    }
+
+    /**
+     * _construct
+     * @return void
+     */
+    protected function _construct()
+    {
+        parent::_construct();
+        $this->setId('bannerGrid');
+        $this->setDefaultSort('id');
+        $this->setDefaultDir('ASC');
+        $this->setSaveParametersInSession(true);
+        $this->setUseAjax(true);
+        if ($this->getRequest()->getParam('id')) {
+            $this->setDefaultFilter(['in_banner' => 1]);
+        }
+    }
+
+    /**
+     * add Column Filter To Collection
+     */
+    protected function _addColumnFilterToCollection($column)
+    {
+        if ($column->getId() == 'in_banner') {
+            $bannerIds = $this->_getSelectedBanners();
+
+            if (empty($bannerIds)) {
+                $bannerIds = 0;
+            }
+
+            if ($column->getFilter()->getValue()) {
+                $this->getCollection()->addFieldToFilter('id', ['in' => $bannerIds]);
+            } else {
+                if ($bannerIds) {
+                    $this->getCollection()->addFieldToFilter('id', ['nin' => $bannerIds]);
+                }
+            }
+        } else {
+            parent::_addColumnFilterToCollection($column);
+        }
+
+        return $this;
+    }
+
+    /**
+     * prepare collection
+     */
+    protected function _prepareCollection()
+    {
+        /** @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\Collection $collection */
+        $collection = $this->_bannerCollectionFactory->create();
+        $this->setCollection($collection);
+
+        return parent::_prepareCollection();
+    }
+
+    /**
+     * @return $this
+     */
+    protected function _prepareColumns()
+    {
+        $this->addColumn(
+            'in_banner',
+            [
+                'header_css_class' => 'a-center',
+                'type'   => 'checkbox',
+                'name'   => 'in_banner',
+                'align'  => 'center',
+                'index'  => 'id',
+                'values' => $this->_getSelectedBanners(),
+            ]
+        );
+
+        $this->addColumn(
+            'id',
+            [
+                'header' => __('Banner ID'),
+                'type'   => 'number',
+                'index'  => 'id',
+                'header_css_class' => 'col-id',
+                'column_css_class' => 'col-id',
+            ]
+        );
+        $this->addColumn(
+            'title',
+            [
+                'header' => __('Title'),
+                'index'  => 'title',
+                'class'  => 'xxx',
+                'width'  => '50px',
+            ]
+        );
+        $this->addColumn(
+            'image',
+            [
+                'header' => __('Image'),
+                'filter' => false,
+                'width'  => '50px',
+                'renderer' => 'WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Helper\Renderer\Image',
+            ]
+        );
+        $this->addColumn(
+            'mobile_image',
+            [
+                'header' => __('Mobile Image'),
+                'filter' => false,
+                'width'  => '50px',
+                'renderer' => 'WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Helper\Renderer\MobileImage',
+            ]
+        );
+        $this->addColumn(
+            'title',
+            [
+                'header' => __('Banner Title'),
+                'index'  => 'title',
+                'width'  => '50px',
+            ]
+        );
+        $this->addColumn(
+            'valid_from',
+            [
+                'header' => __('Valid From'),
+                'type'   => 'datetime',
+                'index'  => 'valid_from',
+                'width'  => '50px',
+                'timezone' => true,
+            ]
+        );
+
+        $this->addColumn(
+            'valid_to',
+            [
+                'header' => __('Valid To'),
+                'type'   => 'datetime',
+                'index'  => 'valid_to',
+                'width'  => '50px',
+                'timezone' => true,
+            ]
+        );
+
+        $this->addColumn(
+            'status',
+            [
+                'header' => __('Status'),
+                'index'  => 'status',
+                'type'   => 'options',
+                'filter_index' => 'main_table.status',
+                'options' => $this->_status->getAllAvailableStatuses(),
+            ]
+        );
+
+        $this->addColumn(
+            'edit',
+            [
+                'header'   => __('Edit'),
+                'filter'   => false,
+                'sortable' => false,
+                'index'    => 'stores',
+                'renderer' => 'WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tab\Helper\Renderer\EditBanner',
+                'header_css_class' => 'col-action',
+                'column_css_class' => 'col-action',
+            ]
+        );
+
+        $this->addColumn(
+            'sort_order',
+            [
+                'header' => __('Sort Order'),
+                'name'   => 'sort_order',
+                'index'  => 'sort_order',
+                'width'  => '50px',
+                'editable' => true,
+            ]
+        );
+
+        return parent::_prepareColumns();
+    }
+
+    /**
+     * @return string
+     */
+    public function getGridUrl()
+    {
+        return $this->getUrl('*/*/bannersgrid', ['_current' => true]);
+    }
+
+    /**
+     * Get row url
+     * @param  object $row
+     * @return string
+     */
+    public function getRowUrl($row)
+    {
+        return '';
+    }
+
+    /**
+     * Get selected slider banners
+     * @return array
+     */
+    public function getSelectedSliderBanners()
+    {
+        $sliderId = $this->getRequest()->getParam('id');
+        if (!isset($sliderId)) {
+            return [];
+        }
+        $bannerCollection = $this->_bannerCollectionFactory->create();
+        $bannerCollection->addFieldToFilter('slider_id', $sliderId);
+
+        $bannerIds = [];
+        foreach ($bannerCollection as $banner) {
+            $bannerIds[$banner->getId()] = ['sort_order' => $banner->getSortOrder()];
+        }
+
+        return $bannerIds;
+    }
+
+    /**
+     * Get selected banners
+     * @return array|mixed
+     */
+    protected function _getSelectedBanners()
+    {
+        $banners = $this->getRequest()->getParam('banner');
+        if (!is_array($banners)) {
+            $banners = array_keys($this->getSelectedSliderBanners());
+        }
+
+        return $banners;
+    }
+
+    /**
+     * Prepare label for tab.
+     *
+     * @return string
+     */
+    public function getTabLabel()
+    {
+        return __('Banners');
+    }
+
+    /**
+     * Prepare title for tab.
+     *
+     * @return string
+     */
+    public function getTabTitle()
+    {
+        return __('Banners');
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function canShowTab()
+    {
+        return true;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function isHidden()
+    {
+        return true;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Form.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Form.php
new file mode 100644
index 000000000..daf1601a2
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Form.php
@@ -0,0 +1,661 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tab;
+
+use WeltPixel\OwlCarouselSlider\Model\Status;
+use WeltPixel\OwlCarouselSlider\Model\Slider;
+
+
+use Magento\Backend\Block\Widget\Form\Generic;
+use Magento\Backend\Block\Widget\Tab\TabInterface;
+use Magento\Backend\Block\Template\Context;
+use Magento\Framework\Registry;
+use Magento\Framework\Data\FormFactory;
+use Magento\Cms\Model\Wysiwyg\Config;
+/**
+ * Slider Form.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Form extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
+{
+    const FIELD_NAME = 'slider';
+
+    /**
+     * @var \Magento\Config\Model\Config\Structure\Element\Dependency\FieldFactory
+     */
+    protected $_fieldFactory;
+
+    /**
+     * [$_bannersliderHelper description].
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Helper\Data
+     */
+    protected $_bannersliderHelper;
+
+    /**
+     * available status.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\Status
+     */
+    private $_status;
+
+    /**
+     * [__construct description].
+     *
+     * @param \Magento\Backend\Block\Template\Context                                $context
+     * @param \WeltPixel\OwlCarouselSlider\Helper\Data                               $bannersliderHelper
+     * @param \Magento\Framework\Registry                                            $registry
+     * @param \Magento\Framework\Data\FormFactory                                    $formFactory
+     * @param \Magento\Store\Model\System\Store                                      $systemStore
+     * @param \Magento\Config\Model\Config\Structure\Element\Dependency\FieldFactory $fieldFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\Status                              $status
+     * @param array                                                                  $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Template\Context $context,
+        \Magento\Framework\Registry $registry,
+        \Magento\Framework\Data\FormFactory $formFactory,
+        \WeltPixel\OwlCarouselSlider\Helper\Data $bannersliderHelper,
+        \Magento\Config\Model\Config\Structure\Element\Dependency\FieldFactory $fieldFactory,
+        \WeltPixel\OwlCarouselSlider\Model\Status $status,
+        array $data = []
+    ) {
+        parent::__construct($context, $registry, $formFactory, $data);
+
+        $this->_bannersliderHelper = $bannersliderHelper;
+        $this->_fieldFactory       = $fieldFactory;
+        $this->_status       = $status;
+    }
+
+    protected function _prepareLayout()
+    {
+        $this->getLayout()->getBlock('page.title')->setPageTitle($this->getPageTitle());
+    }
+
+    /**
+     * Prepare form.
+     *
+     * @return $this
+     */
+    protected function _prepareForm()
+    {
+        $slider = $this->getSlider();
+        $isElementDisabled = true;
+        /** @var \Magento\Framework\Data\Form $form */
+        $form = $this->_formFactory->create();
+
+        /*
+         * declare dependence
+         */
+        $dependenceBlock = $this->getLayout()->createBlock(
+            'Magento\Backend\Block\Widget\Form\Element\Dependence'
+        );
+
+        // dependence field map array
+        $elements = [];
+
+        $form->setHtmlIdPrefix('page_');
+
+        $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Slider Details')]);
+
+        if ($slider->getId()) {
+            $fieldset->addField('id', 'hidden', ['name' => 'id']);
+        }
+
+        $fieldset->addField(
+            'title',
+            'text',
+            [
+                'name'     => 'title',
+                'label'    => __('Title'),
+                'title'    => __('Title'),
+                'required' => true,
+                'class'    => 'required-entry'
+            ]
+        );
+
+        $fieldset->addField(
+            'show_title',
+            'radios',
+            [
+                'name'     => 'show_title',
+                'label'    => __('Show Title'),
+                'title'    => __('Show Title'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('Yes')],
+                    ['value' => 0, 'label' => __('No')]
+                ],
+                'disabled' => $isElementDisabled
+            ]
+        );
+
+        $elements['status'] = $fieldset->addField(
+            'status',
+            'select',
+            [
+                'label'    => __('Slider Status'),
+                'title'    => __('Slider Status'),
+                'name'     => 'status',
+                'options'  => $this->_status->getAllAvailableStatuses(),
+                'disabled' => false,
+                'required' => false,
+                'note'     => 'If Enabled, the slider will be displayed. Make sure you inserted the Slider in the page. Insert the slider by following documentation.',
+            ]
+        );
+
+        ########### Slider General Configuration ###########
+
+        $elements['separator_one'] = $fieldset->addField(
+            'separator_one',
+            'note',
+            [
+                'text' => __('<strong>Slider General Configuration</strong>'),
+            ]
+        );
+
+        $elements['nav'] = $fieldset->addField(
+            'nav',
+            'select',
+            [
+                'name'     => 'nav',
+                'label'    => __('Next/Prev Buttons'),
+                'title'    => __('Next/Prev Buttons'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'    => 'If True, next/prev buttons are displayed. <br/>Slider Responsive Breakpoints options overwrites this option. Please check below Slider Responsive 
+                Breakpoints options.',
+            ]
+        );
+
+        $elements['dots'] = $fieldset->addField(
+            'dots',
+            'select',
+            [
+                'name'     => 'dots',
+                'label'    => __('Dots'),
+                'title'    => __('Dots'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'    => 'if True, dots navigation are displayed.',
+            ]
+        );
+
+        $elements['transition'] = $fieldset->addField(
+            'transition',
+            'select',
+            [
+                'name'     => 'transition',
+                'label'    => __('Banner Transition Effect'),
+                'title'    => __('Banner Transition Effect'),
+                'required' => false,
+                'values'   => Slider::getAvailableTransition(),
+                'note'     => 'Effect of transition between slides.'
+            ]
+        );
+
+        $elements['center'] = $fieldset->addField(
+            'center',
+            'select',
+            [
+                'name'     => 'center',
+                'label'    => __('Center Item'),
+                'title'    => __('Center Item'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'     => 'Center item. Works well with even an odd number of items.'
+            ]
+        );
+
+        $elements['stagePadding'] = $fieldset->addField(
+            'stagePadding',
+            'text',
+            [
+                'name'     => 'stagePadding',
+                'label'    => __('StagePadding'),
+                'title'    => __('StagePadding'),
+                'required' => false,
+                'note'     => 'Padding left and right on stage (can see neighbours).'
+            ]
+        );
+
+        $elements['margin'] = $fieldset->addField(
+            'margin',
+            'text',
+            [
+                'name'     => 'margin',
+                'label'    => __('Margin'),
+                'title'    => __('Margin'),
+                'required' => false,
+                'note'     => 'Set right margin for each item in carousel.',
+            ]
+        );
+
+        $elements['items'] =$fieldset->addField(
+            'items',
+            'text',
+            [
+                'name'     => 'items',
+                'label'    => __('Items'),
+                'title'    => __('Items'),
+                'required' => true,
+                'class'    => 'validate-greater-than-zero',
+                'note'     => 'The number of items you want to see on the screen. <br/>Slider Responsive Breakpoints options overwrites this option. Please check below Slider 
+                Responsive Breakpoints options.'
+            ]
+        );
+
+        $elements['loop'] = $fieldset->addField(
+            'loop',
+            'select',
+            [
+                'name'     => 'loop',
+                'label'    => __('Loop'),
+                'title'    => __('Loop'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'     => 'Infinite loop. Duplicate last and first items to get loop illusion.'
+            ]
+        );
+
+        $elements['lazyLoad'] = $fieldset->addField(
+            'lazyLoad',
+            'select',
+            [
+                'name'     => 'lazyLoad',
+                'label'    => __('LazyLoad'),
+                'title'    => __('LazyLoad'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'      => 'Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.'
+            ]
+        );
+
+        $elements['autoplay'] = $fieldset->addField(
+            'autoplay',
+            'select',
+            [
+                'name'     => 'autoplay',
+                'label'    => __('Autoplay'),
+                'title'    => __('Autoplay'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+            ]
+        );
+
+        $elements['autoplayTimeout'] = $fieldset->addField(
+            'autoplayTimeout',
+            'text',
+            [
+                'name'     => 'autoplayTimeout',
+                'label'    => __('AutoplayTimeout'),
+                'title'    => __('AutoplayTimeout'),
+                'required' => false,
+                'note'     => 'Autoplay interval timeout. Insert value in ms. Write “4000” for a 4 seconds timeout'
+            ]
+        );
+
+        $elements['autoplayHoverPause'] = $fieldset->addField(
+            'autoplayHoverPause',
+            'select',
+            [
+                'name'     => 'autoplayHoverPause',
+                'label'    => __('AutoplayHoverPause'),
+                'title'    => __('AutoplayHoverPause'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'     => 'Pause on mouse hover.'
+            ]
+        );
+
+        $elements['autoHeight'] = $fieldset->addField(
+            'autoHeight',
+            'select',
+            [
+                'name'     => 'autoHeight',
+                'label'    => __('Auto Height'),
+                'title'    => __('Auto Height'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'    => 'If True, each banner will adjust height.',
+            ]
+        );
+
+        ########### Slider Responsive Breakpoint ###########
+
+        $elements['separator_two'] = $fieldset->addField(
+            'separator_two',
+            'note',
+            [
+               'text' => __('<strong>Slider Responsive Breakpoints.<br/>This configuration will overwrite the main slider options.</strong>'),
+            ]
+        );
+
+        // Breakpoint 1
+        $elements['s1'] = $fieldset->addField(
+            's1',
+            'note',
+            [
+                'text' => __('Breakpoint 1'),
+            ]
+        );
+
+        $elements['nav_brk1'] = $fieldset->addField(
+            'nav_brk1',
+            'select',
+            [
+                'name'     => 'nav_brk1',
+                'label'    => __('Next/Prev Buttons'),
+                'title'    => __('Next/Prev Buttons'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'    => 'If True, next/prev buttons are displayed.',
+            ]
+        );
+
+        $elements['items_brk1'] = $fieldset->addField(
+            'items_brk1',
+            'text',
+            [
+                'name'     => 'items_brk1',
+                'label'    => __('Items'),
+                'title'    => __('Items'),
+                'required' => true,
+                'class'    => 'validate-greater-than-zero',
+                'note'     => 'The number of items you want to see at this breakpoint and higher.'
+            ]
+        );
+
+        // Breakpoint 2
+
+        $elements['s2'] = $fieldset->addField(
+            's2',
+            'note',
+            [
+                'text' => __('Breakpoint 2'),
+            ]
+        );
+
+        $elements['nav_brk2'] = $fieldset->addField(
+            'nav_brk2',
+            'select',
+            [
+                'name'     => 'nav_brk2',
+                'label'    => __('Next/Prev Buttons'),
+                'title'    => __('Next/Prev Buttons'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'    => 'If True, next/prev buttons are displayed.',
+            ]
+        );
+
+        $elements['items_brk2'] = $fieldset->addField(
+            'items_brk2',
+            'text',
+            [
+                'name'     => 'items_brk2',
+                'label'    => __('Items'),
+                'title'    => __('Items'),
+                'required' => true,
+                'class'    => 'validate-greater-than-zero',
+                'note'     => 'The number of items you want to see at this breakpoint and higher.'
+            ]
+        );
+
+        // Breakpoint 3
+
+        $elements['s3'] = $fieldset->addField(
+            's3',
+            'note',
+            [
+                'text' => __('Breakpoint 3'),
+            ]
+        );
+
+        $elements['nav_brk3'] = $fieldset->addField(
+            'nav_brk3',
+            'select',
+            [
+                'name'     => 'nav_brk3',
+                'label'    => __('Next/Prev Buttons'),
+                'title'    => __('Next/Prev Buttons'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'    => 'If True, next/prev buttons are displayed.',
+            ]
+        );
+
+        $elements['items_brk3'] = $fieldset->addField(
+            'items_brk3',
+            'text',
+            [
+                'name'     => 'items_brk3',
+                'label'    => __('Items'),
+                'title'    => __('Items'),
+                'required' => true,
+                'class'    => 'validate-greater-than-zero',
+                'note'     => 'The number of items you want to see at this breakpoint and higher.'
+            ]
+        );
+
+        // Breakpoint 4
+
+        $elements['s4'] = $fieldset->addField(
+            's4',
+            'note',
+            [
+                'text' => __('Breakpoint 4'),
+            ]
+        );
+
+        $elements['nav_brk4'] = $fieldset->addField(
+            'nav_brk4',
+            'select',
+            [
+                'name'     => 'nav_brk4',
+                'label'    => __('Next/Prev Buttons'),
+                'title'    => __('Next/Prev Buttons'),
+                'required' => false,
+                'values'   => [
+                    ['value' => 1, 'label' => __('True')],
+                    ['value' => 0, 'label' => __('False')]
+                ],
+                'note'    => 'If True, next/prev buttons are displayed.',
+            ]
+        );
+
+        $elements['items_brk4'] = $fieldset->addField(
+            'items_brk4',
+            'text',
+            [
+                'name'     => 'items_brk4',
+                'label'    => __('Items'),
+                'title'    => __('Items'),
+                'required' => true,
+                'class'    => 'validate-greater-than-zero',
+                'note'     => 'The number of items you want to see at this breakpoint and higher.'
+            ]
+        );
+
+        /*
+          * Add field map
+          */
+        foreach ($elements as $fieldMap) {
+            $dependenceBlock->addFieldMap($fieldMap->getHtmlId(), $fieldMap->getName());
+        }
+
+        $mappingFieldDependence = $this->getMappingFieldDependence();
+        /*
+         * Add field dependence
+         */
+        foreach ($mappingFieldDependence as $dependence) {
+            $negative = isset($dependence['negative']) && $dependence['negative'];
+            if (is_array($dependence['fieldName'])) {
+                foreach ($dependence['fieldName'] as $fieldName) {
+                    $dependenceBlock->addFieldDependence(
+                        $elements[$fieldName]->getName(),
+                        $elements[$dependence['fieldNameFrom']]->getName(),
+                        $this->getDependencyField($dependence['refField'], $negative)
+                    );
+                }
+            } else {
+                $dependenceBlock->addFieldDependence(
+                    $elements[$dependence['fieldName']]->getName(),
+                    $elements[$dependence['fieldNameFrom']]->getName(),
+                    $this->getDependencyField($dependence['refField'], $negative)
+                );
+            }
+        }
+
+        /*
+         * add child block dependence
+         */
+        $this->setChild('form_after', $dependenceBlock);
+
+        if (!$slider->getId()) {
+            $slider->setStatus($isElementDisabled ? Status::STATUS_ENABLED : Status::STATUS_DISABLED);
+        }
+
+        $form->setValues($slider->getData());
+        $form->addFieldNameSuffix(self::FIELD_NAME);
+        $this->setForm($form);
+
+        return parent::_prepareForm();
+    }
+    /**
+     * get dependency field.
+     *
+     * @return Magento\Config\Model\Config\Structure\Element\Dependency\Field [description]
+     */
+    public function getDependencyField($refField, $negative = false, $separator = ',', $fieldPrefix = '')
+    {
+        return $this->_fieldFactory->create(
+            ['fieldData' => [
+                'value' => (string)$refField,
+                'negative' => $negative,
+                'separator' => $separator],
+                'fieldPrefix' => $fieldPrefix
+            ]
+        );
+    }
+
+    public function getMappingFieldDependence()
+    {
+        return [
+            [
+                'fieldName'     => 'center',
+                'fieldNameFrom' => 'transition',
+                'refField'      => 'fadeOut',
+                'negative'      => true,
+            ],
+            [
+                'fieldName'     => 'margin',
+                'fieldNameFrom' => 'transition',
+                'refField'      => 'fadeOut',
+                'negative'      => true,
+            ],
+            [
+                'fieldName'     => 'stagePadding',
+                'fieldNameFrom' => 'transition',
+                'refField'      => 'fadeOut',
+                'negative'      => true,
+            ],
+            [
+                'fieldName'     => 'stagePadding',
+                'fieldNameFrom' => 'center',
+                'refField'      => '1',
+                'negative'      => true,
+            ],
+        ];
+    }
+
+    public function getSlider()
+    {
+        return $this->_coreRegistry->registry('slider');
+    }
+
+    public function getPageTitle()
+    {
+        return $this->getSlider()->getId()
+            ? __("Edit Slider '%1'", $this->escapeHtml($this->getSlider()->getTitle()))
+            : __('New Slider');
+    }
+
+    /**
+     * Prepare label for tab.
+     *
+     * @return string
+     */
+    public function getTabLabel()
+    {
+        return __('Slider Details');
+    }
+
+    /**
+     * Prepare title for tab.
+     *
+     * @return string
+     */
+    public function getTabTitle()
+    {
+        return __('Slider Details');
+    }
+
+    /**
+     * Can show tab in tabs
+     *
+     * @return boolean
+     * @api
+     */
+    public function canShowTab()
+    {
+        return true;
+    }
+
+    /**
+     * Tab is hidden
+     *
+     * @return boolean
+     * @api
+     */
+    public function isHidden()
+    {
+        return false;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Helper/Renderer/EditBanner.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Helper/Renderer/EditBanner.php
new file mode 100644
index 000000000..dc8d6e383
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tab/Helper/Renderer/EditBanner.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tab\Helper\Renderer;
+
+/**
+ * Edit banner form
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class EditBanner extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
+{
+    /**
+     * Store manager.
+     *
+     * @var \Magento\Store\Model\StoreManagerInterface
+     */
+    protected $_storeManager;
+
+    /**
+     * banner factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\BannerFactory
+     */
+    protected $_bannerFactory;
+
+    /**
+     * [__construct description].
+     *
+     * @param \Magento\Backend\Block\Context                   $context
+     * @param \Magento\Store\Model\StoreManagerInterface       $storeManager
+     * @param \WeltPixel\OwlCarouselSlider\Model\BannerFactory $bannerFactory
+     * @param array                                            $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Context $context,
+        \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \WeltPixel\OwlCarouselSlider\Model\BannerFactory $bannerFactory,
+        array $data = []
+    ) {
+        parent::__construct($context, $data);
+        $this->_storeManager = $storeManager;
+        $this->_bannerFactory = $bannerFactory;
+    }
+
+    /**
+     * Render action.
+     *
+     * @param \Magento\Framework\DataObject $row
+     *
+     * @return string
+     */
+    public function render(\Magento\Framework\DataObject $row)
+    {
+        return '<a href="' . $this->getUrl('*/banner/edit', ['_current' => false, 'id' => $row->getId()])
+            . '" target="_blank">Edit</a> ';
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tabs.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tabs.php
new file mode 100644
index 000000000..493901e39
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Edit/Tabs.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit;
+
+/**
+ * Admin Locator left menu.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Tabs extends \Magento\Backend\Block\Widget\Tabs
+{
+    protected function _construct()
+    {
+        parent::_construct();
+        
+        $this->setId('slider_tabs');
+        $this->setDestElementId('edit_form');
+        $this->setTitle(__('Slider Information'));
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Grid.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Grid.php
new file mode 100644
index 000000000..aa25e35eb
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Slider/Grid.php
@@ -0,0 +1,212 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider;
+
+/**
+ * Slider grid.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
+{
+    /**
+     * Slider collection factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory
+     */
+    protected $_sliderCollectionFactory;
+
+    /**
+     * Helper.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Helper\Data
+     */
+    protected $_bannersliderHelper;
+
+    /**
+     * Available status.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\Status
+     */
+    private $_status;
+
+    /**
+     * [__construct description].
+     *
+     * @param \Magento\Backend\Block\Template\Context                                   $context
+     * @param \Magento\Backend\Helper\Data                                              $backendHelper
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory $sliderCollectionFactory
+     * @param \WeltPixel\OwlCarouselSlider\Helper\Data                                  $bannersliderHelper
+     * @param \WeltPixel\OwlCarouselSlider\Model\Status                                 $status
+     * @param array                                                                     $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Template\Context $context,
+        \Magento\Backend\Helper\Data $backendHelper,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory $sliderCollectionFactory,
+        \WeltPixel\OwlCarouselSlider\Helper\Data $bannersliderHelper,
+        \WeltPixel\OwlCarouselSlider\Model\Status $status,
+        array $data = []
+    ) {
+        parent::__construct($context, $backendHelper, $data);
+
+        $this->_sliderCollectionFactory = $sliderCollectionFactory;
+        $this->_bannersliderHelper = $bannersliderHelper;
+        $this->_status = $status;
+    }
+
+    /**
+     * Internal constructor, that is called from real constructor
+     * @return void
+     */
+    protected function _construct()
+    {
+        parent::_construct();
+
+        $this->setId('sliderGrid');
+        $this->setDefaultSort('id');
+        $this->setDefaultDir('ASC');
+        $this->setSaveParametersInSession(true);
+        $this->setUseAjax(true);
+    }
+
+    /**
+     * Prepare collection.
+     *
+     * @return [type] [description]
+     */
+    protected function _prepareCollection()
+    {
+        $collection = $this->_sliderCollectionFactory->create();
+        $this->setCollection($collection);
+
+        return parent::_prepareCollection();
+    }
+
+    /**
+     * @return $this
+     */
+    protected function _prepareColumns()
+    {
+        $this->addColumn(
+            'id',
+            [
+                'header' => __('Slider ID'),
+                'type'   => 'number',
+                'index'  => 'id',
+                'header_css_class' => 'col-id',
+                'column_css_class' => 'col-id',
+            ]
+        );
+
+        $this->addColumn(
+            'status',
+            [
+                'header'  => __('Status'),
+                'index'   => 'status',
+                'type'    => 'options',
+                'options' => $this->_status->getAllAvailableStatuses(),
+            ]
+        );
+
+        $this->addColumn(
+            'title',
+            [
+                'header' => __('Title'),
+                'index'  => 'title',
+                'class'  => 'xxx',
+                'width'  => '50px',
+            ]
+        );
+
+        $this->addColumn(
+            'edit',
+            [
+                'header'  => __('Edit'),
+                'type'    => 'action',
+                'getter'  => 'getId',
+                'actions' => [
+                    [
+                        'caption' => __('Edit'),
+                        'url' => [
+                            'base' => '*/*/edit',
+                        ],
+                        'field' => 'id',
+                    ],
+                ],
+                'filter'   => false,
+                'sortable' => false,
+                'index'    => 'stores',
+                'header_css_class' => 'col-action',
+                'column_css_class' => 'col-action',
+            ]
+        );
+        $this->addExportType('*/*/exportCsv', __('CSV'));
+        $this->addExportType('*/*/exportXml', __('XML'));
+        $this->addExportType('*/*/exportExcel', __('Excel'));
+
+        return parent::_prepareColumns();
+    }
+
+    /**
+     * @return $this
+     */
+    protected function _prepareMassaction()
+    {
+        $this->setMassactionIdField('entity_id');
+        $this->getMassactionBlock()->setFormFieldName('slider');
+
+        $this->getMassactionBlock()->addItem(
+            'delete',
+            [
+                'label' => __('Delete'),
+                'url' => $this->getUrl('weltowlcarousel/*/massDelete'),
+                'confirm' => __('Are you sure?'),
+            ]
+        );
+
+        $status = $this->_status->getAllAvailableStatuses();
+        array_unshift($status, ['label' => '', 'value' => '']);
+        $this->getMassactionBlock()->addItem(
+            'status',
+            [
+                'label' => __('Change status'),
+                'url' => $this->getUrl('weltowlcarousel/*/massStatus', ['_current' => true]),
+                'additional' => [
+                    'visibility' => [
+                        'name'   => 'status',
+                        'type'   => 'select',
+                        'class'  => 'required-entry',
+                        'label'  => __('Status'),
+                        'values' => $status,
+                    ],
+                ],
+            ]
+        );
+
+        return $this;
+    }
+
+    /**
+     * @return string
+     */
+    public function getGridUrl()
+    {
+        return $this->getUrl('*/*/grid', ['_current' => true]);
+    }
+
+    /**
+     * get row url
+     * @param  object $row
+     * @return string
+     */
+    public function getRowUrl($row)
+    {
+        return $this->getUrl(
+            '*/*/edit',
+            ['id' => $row->getId()]
+        );
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralCarousel.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralCarousel.php
new file mode 100644
index 000000000..09c5ca7c0
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralCarousel.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config;
+
+/**
+ * Class SeparatorGeneralCarousel
+ * @package WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config
+ */
+class SeparatorGeneralCarousel extends \Magento\Config\Block\System\Config\Form\Field
+{
+    /**
+     * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
+     * @return string
+     */
+    protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
+    {
+        $html = '
+            <div class="message" style="text-align: center; margin-top: 20px;">
+                <strong>' . __('General Carousel Settings') . '</strong><br />
+            </div>
+        ';
+
+        return $html;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralSlider.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralSlider.php
new file mode 100644
index 000000000..f7f121ce9
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/SeparatorGeneralSlider.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config;
+
+/**
+ * Class SeparatorGeneralSlider
+ * @package WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config
+ */
+class SeparatorGeneralSlider extends \Magento\Config\Block\System\Config\Form\Field
+{
+    /**
+     * @param \Magento\Framework\Data\Form\Element\AbstractElement $element
+     * @return string
+     */
+    protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
+    {
+        $html = '
+            <div class="message" style="text-align: center; margin-top: 20px;">
+                <strong>' . __('General Slider Settings') . '</strong><br />
+            </div>
+        ';
+
+        return $html;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorbreakpoint.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorbreakpoint.php
new file mode 100644
index 000000000..aedc54216
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorbreakpoint.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config;
+
+/**
+ * Implement
+ * @category WeltPixel_OwlCarouselSlider
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel_OwlCarouselSlider Developer
+ */
+class Separatorbreakpoint extends \Magento\Config\Block\System\Config\Form\Field
+{
+    protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
+    {
+        $number = (int)substr($element->getId(), -1);
+
+        if($number > 0) {
+            $html = '
+                <p style="text-align: center;"><strong >' . __('Breakpoint ') . $number . '</strong></p>
+            ';
+        } else {
+            $html = '
+            <div class="message" style="text-align: center; margin-top: 20px;">
+                <p><strong>' . __('Breakpoint Carousel Options') . '</strong></p>
+                <p><strong>' . __('This configuration will overwrite the General Carousel Options.') . '</strong></p>
+            </div>
+        ';
+        }
+
+        return $html;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorslide.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorslide.php
new file mode 100644
index 000000000..64ab34da9
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/System/Config/Separatorslide.php
@@ -0,0 +1,24 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config;
+
+/**
+ * Implement
+ * @category WeltPixel_OwlCarouselSlider
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel_OwlCarouselSlider Developer
+ */
+class Separatorslide extends \Magento\Config\Block\System\Config\Form\Field
+{
+    protected function _getElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
+    {
+        $html = '
+            <div class="message" style="text-align: center; margin-top: 20px;">
+                <strong>' . __('General Carousel Options') . '</strong><br />
+            </div>
+        ';
+
+        return $html;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Widget/UpgradeToPro.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Widget/UpgradeToPro.php
new file mode 100644
index 000000000..98741cfd2
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Adminhtml/Widget/UpgradeToPro.php
@@ -0,0 +1,22 @@
+<?php
+namespace WeltPixel\OwlCarouselSlider\Block\Adminhtml\Widget;
+
+/**
+ * Class UpgradeToPro
+ * @package WeltPixel\OwlCarouselSlider\Block\Adminhtml\Widget
+ */
+class UpgradeToPro extends \Magento\Backend\Block\Widget\Grid\Extended
+{
+    /**
+     * Prepare chooser element HTML
+     *
+     * @param \Magento\Framework\Data\Form\Element\AbstractElement $element Form Element
+     * @return \Magento\Framework\Data\Form\Element\AbstractElement
+     */
+    public function prepareElementHtml(\Magento\Framework\Data\Form\Element\AbstractElement $element)
+    {
+        $upgradeText = __('<b style="font-size: 16px"><a style="font-size: 16px" target="_blank" href="https://www.weltpixel.com/owl-carousel-and-slider.html">Upgrade to Pro version</a> to enable this functionality.</b>');
+        $element->setData('after_element_html', $upgradeText);
+        return $element;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Product/ImageBuilder.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Product/ImageBuilder.php
new file mode 100644
index 000000000..d4e37e87c
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Product/ImageBuilder.php
@@ -0,0 +1,100 @@
+<?php
+namespace WeltPixel\OwlCarouselSlider\Block\Product;
+
+use Magento\Catalog\Helper\ImageFactory as HelperFactory;
+
+class ImageBuilder extends \Magento\Catalog\Block\Product\ImageBuilder
+{
+    /**
+     * @var \WeltPixel\OwlCarouselSlider\Helper\Custom
+     */
+    protected $_helperCustom;
+
+    /**
+     * @param HelperFactory $helperFactory
+     * @param \Magento\Catalog\Block\Product\ImageFactory $imageFactory
+     * @param \WeltPixel\OwlCarouselSlider\Helper\Custom $_helperCustom
+     */
+    public function __construct(
+        HelperFactory $helperFactory,
+        \Magento\Catalog\Block\Product\ImageFactory $imageFactory,
+        \WeltPixel\OwlCarouselSlider\Helper\Custom $_helperCustom
+    ) {
+        $this->_helperCustom = $_helperCustom;
+        parent::__construct($helperFactory, $imageFactory);
+    }
+
+
+
+    /**
+     * Create image block
+     *
+     * @return \Magento\Catalog\Block\Product\Image
+     */
+    public function create()
+    {
+        /** Check if module is enabled */
+        if (!$this->isLazyLoadEnabled()) {
+            return parent::create();
+        }
+
+        /** @var \Magento\Catalog\Helper\Image $helper */
+        $helper = $this->helperFactory->create()
+            ->init($this->product, $this->imageId);
+
+        $template = $helper->getFrame()
+            ? 'WeltPixel_OwlCarouselSlider::product/image.phtml'
+            : 'WeltPixel_OwlCarouselSlider::product/image_with_borders.phtml';
+
+        $data['data']['template'] = $template;
+
+        $imagesize = $helper->getResizedImageInfo();
+
+        $data = [
+            'data' => [
+                'template' => $template,
+                'image_url' => $helper->getUrl(),
+                'width' => $helper->getWidth(),
+                'height' => $helper->getHeight(),
+                'label' => $helper->getLabel(),
+                'ratio' =>  $this->getRatio($helper),
+                'custom_attributes' => $this->getCustomAttributes(),
+                'resized_image_width' => !empty($imagesize[0]) ? $imagesize[0] : $helper->getWidth(),
+                'resized_image_height' => !empty($imagesize[1]) ? $imagesize[1] : $helper->getHeight(),
+            ],
+        ];
+
+        $data['data']['lazy_load'] = true;
+
+        return $this->imageFactory->create($data);
+    }
+
+    /**
+     * @return bool
+     */
+    protected function isLazyLoadEnabled() {
+        foreach ($this->attributes as $name => $value) {
+            if ($name == 'weltpixel_lazyLoad') {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Retrieve image custom attributes for HTML element
+     *
+     * @return string
+     */
+    protected function getCustomAttributes()
+    {
+        $result = [];
+        foreach ($this->attributes as $name => $value) {
+            if ($name == 'weltpixel_lazyLoad') continue;
+            $result[] = $name . '="' . $value . '"';
+        }
+        return !empty($result) ? implode(' ', $result) : '';
+    }
+
+}
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Custom.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Custom.php
new file mode 100644
index 000000000..6be790362
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Custom.php
@@ -0,0 +1,64 @@
+<?php
+namespace WeltPixel\OwlCarouselSlider\Block\Slider;
+
+class Custom extends \Magento\Framework\View\Element\Template implements \Magento\Widget\Block\BlockInterface
+{
+    protected $_sliderId;
+    protected $_sliderConfiguration;
+    protected $_helperCustom;
+
+    /**
+     * Internal constructor, that is called from real constructor
+     *
+     * @param \Magento\Framework\View\Element\Template\Context  $context
+     * @param \Magento\Framework\Registry $registry
+     * @param \WeltPixel\OwlCarouselSlider\Helper\Custom        $helperCustom
+     */
+
+    public function __construct(
+        \Magento\Framework\View\Element\Template\Context $context,
+        \Magento\Framework\Registry $registry,
+        \WeltPixel\OwlCarouselSlider\Helper\Custom $helperCustom,
+
+        array $data = []
+    )
+    {
+        $this->_coreRegistry = $registry;
+        $this->_helperCustom = $helperCustom;
+
+        $this->setTemplate('sliders/custom.phtml');
+
+        parent::__construct($context, $data);
+    }
+
+    public function getSliderConfiguration()
+    {
+        $sliderId = $this->getData('slider_id');
+
+        if ($this->_sliderId != $sliderId) {
+            $this->_sliderId = $sliderId;
+        }
+
+        if (is_null($this->_sliderConfiguration)) {
+
+            $this->_sliderConfiguration = $this->_helperCustom->getSliderConfigOptions($this->_sliderId);
+        }
+
+        return $this->_sliderConfiguration;
+    }
+
+    public function getBreakpointConfiguration()
+    {
+        return $this->_helperCustom->getBreakpointConfiguration();
+    }
+
+    public function getMediaUrl()
+    {
+        return $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
+    }
+
+    public function isGatEnabled()
+    {
+        return $this->_helperCustom->isGatEnabled();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Products.php b/app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Products.php
new file mode 100644
index 000000000..a335665fc
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Block/Slider/Products.php
@@ -0,0 +1,510 @@
+<?php
+namespace WeltPixel\OwlCarouselSlider\Block\Slider;
+
+class Products extends \Magento\Catalog\Block\Product\AbstractProduct implements \Magento\Widget\Block\BlockInterface
+{
+    /**
+     * Core registry.
+     *
+     * @var \Magento\Framework\Registry
+     */
+    protected $_coreRegistry;
+    protected $_helperProducts;
+    protected $_helperCustom;
+    protected $_productType;
+    protected $_sliderConfiguration;
+
+    protected $_currentProduct;
+    /**
+     * Products visibility
+     * @var \Magento\Reports\Model\Event\TypeFactory
+     */
+    protected $_catalogProductVisibility;
+
+    protected $_productCollectionFactory;
+    protected $_reportsCollectionFactory;
+    protected $_viewProductsBlock;
+
+    /**
+     * Internal constructor, that is called from real constructor
+     *
+     * @param \Magento\Catalog\Block\Product\Context                                $context
+     * @param \WeltPixel\OwlCarouselSlider\Helper\Products                          $helperProducts
+     * @param \WeltPixel\OwlCarouselSlider\Helper\Custom                            $helperCustom
+     * @param \Magento\Catalog\Model\Product\Visibility                             $catalogProductVisibility
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory        $productsCollectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Product\CollectionFactory        $reportsCollectionFactory
+     * @param \Magento\Reports\Block\Product\Widget\Viewed\Proxy                    $viewedProductsBlock
+     */
+
+    public function __construct(
+        \Magento\Catalog\Block\Product\Context $context,
+        \WeltPixel\OwlCarouselSlider\Helper\Products $helperProducts,
+        \WeltPixel\OwlCarouselSlider\Helper\Custom $helperCustom,
+        \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productsCollectionFactory,
+        \Magento\Reports\Model\ResourceModel\Product\CollectionFactory $reportsCollectionFactory,
+        \Magento\Reports\Block\Product\Widget\Viewed\Proxy $viewedProductsBlock,
+        array $data = []
+    )
+    {
+        $this->_coreRegistry              = $context->getRegistry();
+        $this->_helperCustom              = $helperCustom;
+        $this->_helperProducts            = $helperProducts;
+        $this->_catalogProductVisibility  = $catalogProductVisibility;
+        $this->_productCollectionFactory  = $productsCollectionFactory;
+        $this->_reportsCollectionFactory  = $reportsCollectionFactory;
+        $this->_viewProductsBlock         = $viewedProductsBlock;
+
+        $this->setTemplate('sliders/products.phtml');
+
+        if (is_null($this->_currentProduct)) {
+            $this->_currentProduct = $this->_coreRegistry->registry('current_product');
+        }
+
+        parent::__construct($context, $data);
+        $this->_isScopePrivate = false;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function _construct()
+    {
+        parent::_construct();
+
+        $this->addData([
+            'cache_lifetime' => 86400,
+            'cache_tags' => [\Magento\Catalog\Model\Product::CACHE_TAG,
+            ], ]);
+    }
+
+    /**
+     * Get key pieces for caching block content
+     *
+     * @return array
+     */
+    public function getCacheKeyInfo()
+    {
+        return [
+            'WELTPIXEL_PRODUCTS_LIST_WIDGET',
+            $this->_storeManager->getStore()->getId(),
+            $this->_design->getDesignTheme()->getId(),
+            $this->getData('products_type')
+        ];
+    }
+
+
+    /**
+     * Retrieve the product collection based on product type.
+     *
+     * @return array|\Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    public function getProductCollection()
+    {
+        $productsType = $this->getData('products_type');
+
+        switch ($productsType) {
+            case 'new_products':
+                $productCollection =  $this->_getNewProductCollection($this->_productCollectionFactory->create());
+                break;
+            case 'bestsell_products':
+                $productCollection = $this->_getBestsellProductCollection($this->_productCollectionFactory->create());
+                break;
+            case 'sell_products':
+                $productCollection =  $this->_getSellProductCollection($this->_productCollectionFactory->create());
+                break;
+            case 'recently_viewed':
+                $productCollection =  $this->_getRecentlyViewedCollection($this->_productCollectionFactory->create());
+                break;
+            case 'related_products':
+                $productCollection = $this->getProductCollectionRelated();
+                break;
+            case 'upsell_products':
+                $productCollection = $this->getProductCollectionUpSell();
+                break;
+            case 'crosssell_products':
+                $productCollection = $this->getProductCollectionCrossSell();
+                break;
+            default:
+                $productCollection = [];
+        }
+
+        return $productCollection;
+    }
+
+    /**
+     * Retrieve the Slider settings.
+     *
+     * @return array
+     */
+    public function getSliderConfiguration()
+    {
+        $productsType = $this->getData('products_type');
+
+        if (is_null($this->_sliderConfiguration) && $this->_productType != $productsType) {
+            $this->_productType = $productsType;
+            $this->_sliderConfiguration = $this->_helperProducts->getSliderConfigOptions($productsType);
+        }
+
+        return $this->_sliderConfiguration;
+    }
+
+    /**
+     * Retrieve the Slider Breakpoint settings.
+     *
+     * @return array
+     */
+    public function getBreakpointConfiguration()
+    {
+        return $this->_helperCustom->getBreakpointConfiguration();
+    }
+
+    /**
+     * Get new slider products.
+     *
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $_collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    protected function _getNewProductCollection($_collection)
+    {
+        $limit  = $this->_getProductLimit('new_products');
+        $random = $this->_getRandomSort('new_products');
+
+        if (!$limit || $limit == 0) {
+            return [];
+        }
+
+        $_collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
+
+        if ($random) {
+            $allIds = $_collection->getAllIds();
+            $randomIds = [];
+            $maxKey = count($allIds) - 1;
+            while (count($randomIds) <= count($allIds) - 1) {
+                $randomKey = mt_rand(0, $maxKey);
+                $randomIds[$randomKey] = $allIds[$randomKey];
+            }
+
+            $_collection->addIdFilter($randomIds);
+        };
+
+        $_collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
+
+        $_collection = $this->_addProductAttributesAndPrices($_collection)
+            ->addAttributeToFilter(
+                'news_from_date',
+                ['date' => true, 'to' => $this->getEndOfDayDate()],
+                'left')
+            ->addAttributeToFilter(
+                'news_to_date',
+                [
+                    'or' => [
+                        0 => ['date' => true, 'from' => $this->getStartOfDayDate()],
+                        1 => ['is' => new \Zend_Db_Expr('null')],
+                    ]
+                ],
+                'left')
+            ->addAttributeToSort(
+                'news_from_date',
+                'desc')
+            ->addStoreFilter($this->getStoreId())->setCurPage(1);
+
+        if ($limit && $limit > 0 ) {
+            $_collection->setPageSize($limit);
+        };
+
+        return $_collection;
+    }
+
+    /**
+     * Get best-sell slider products.
+     *
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $_collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    protected function _getBestsellProductCollection($_collection)
+    {
+        $limit  = $this->_getProductLimit('bestsell_products');
+        $random = $this->_getRandomSort('bestsell_products');
+
+        if (!$limit || $limit == 0) {
+            return [];
+        };
+
+        $_collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
+
+        if ($random) {
+            $allIds = $_collection->getAllIds();
+            $candidateIds = $_collection->getAllIds();
+            $randomIds = [];
+            $maxKey = count($candidateIds) - 1;
+            while (count($randomIds) <= count($allIds) - 1) {
+                $randomKey = mt_rand(0, $maxKey);
+                $randomIds[$randomKey] = $candidateIds[$randomKey];
+            }
+
+            $_collection->addIdFilter($randomIds);
+        };
+
+        $_collection = $this->_addProductAttributesAndPrices($_collection);
+        $_collection->getSelect()
+            ->join(['bestsellers' => $_collection->getTable('sales_bestsellers_aggregated_yearly')],
+                'e.entity_id = bestsellers.product_id AND bestsellers.store_id = '.$this->getStoreId(),
+                ['qty_ordered','rating_pos'])
+            ->order('rating_pos');
+
+        $_collection->addStoreFilter($this->getStoreId())->setCurPage(1);
+
+        if ($limit && $limit > 0 ) {
+            $_collection->setPageSize($limit);
+        };
+
+        return $_collection;
+    }
+
+    /**
+     * Get sell slider products.
+     *
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $_collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    protected function _getSellProductCollection($_collection)
+    {
+        $limit  = $this->_getProductLimit('sell_products');
+        $random = $this->_getRandomSort('sell_products');
+
+        if(!$limit || $limit == 0) {
+            return [];
+        };
+
+        $_collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
+
+        if ($random) {
+            $allIds = $_collection->getAllIds();
+            $candidateIds = $_collection->getAllIds();
+            $randomIds = [];
+            $maxKey = count($candidateIds) - 1;
+            while (count($randomIds) <= count($allIds) - 1) {
+                $randomKey = mt_rand(0, $maxKey);
+                $randomIds[$randomKey] = $candidateIds[$randomKey];
+            }
+
+            $_collection->addIdFilter($randomIds);
+        };
+
+        $_collection = $this->_addProductAttributesAndPrices($_collection)
+            ->addAttributeToFilter(
+                'special_from_date',
+                ['date' => true, 'to' => $this->getEndOfDayDate()],
+                'left')
+            ->addAttributeToFilter(
+                'special_to_date',
+                [
+                    'or' => [
+                        0 => ['date' => true, 'from' => $this->getStartOfDayDate()],
+                        1 => ['is' => new \Zend_Db_Expr('null')],
+                    ]
+                ],
+                'left')
+            ->addAttributeToSort(
+                'news_from_date',
+                'desc')
+            ->addStoreFilter($this->getStoreId())
+            ->setCurPage(1);
+
+        if($limit && $limit > 0 ) {
+            $_collection->setPageSize($limit);
+        };
+
+        return $_collection;
+    }
+
+    /**
+     * Get recently viewed slider products.
+     *
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $_collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    protected function _getRecentlyViewedCollection($_collection)
+    {
+        $limit  = $this->_getProductLimit('recently_viewed');
+        $random = $this->_getRandomSort('recently_viewed');
+
+        if($limit == 0) {
+            return [];
+        };
+
+        $_collection = $this->_viewProductsBlock->getItemsCollection();
+
+        if ($random) {
+            $allIds = $_collection->getAllIds();
+            $candidateIds = $_collection->getAllIds();
+            $randomIds = [];
+            $maxKey = count($candidateIds) - 1;
+            while (count($randomIds) <= count($allIds) - 1) {
+                $randomKey = mt_rand(0, $maxKey);
+                $randomIds[$randomKey] = $candidateIds[$randomKey];
+            }
+
+            $_collection->addIdFilter($randomIds);
+        };
+
+        if ($limit && $limit > 0 ) {
+            $_collection->setPageSize($limit);
+        };
+
+        return $_collection;
+    }
+
+    /**
+     * Get related slider products.
+     *
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    public function getProductCollectionRelated()
+    {
+        if (!$this->_currentProduct) {
+            return [];
+        }
+
+        return $this->getRelatedProducts($this->_currentProduct);
+    }
+
+    /**
+     * Retrieve array of related products.
+     *
+     * @return array
+     */
+    public function getRelatedProducts($currentProduct)
+    {
+        if (!$currentProduct->hasRelatedProducts()) {
+            $products = [];
+            $_collection = $currentProduct->getRelatedProductCollection();
+            $_collection->addAttributeToSelect('*');
+            foreach ($_collection as $product) {
+                $products[] = $product;
+            }
+            $currentProduct->setRelatedProducts($products);
+        }
+
+        return $currentProduct->getData('related_products');
+    }
+
+    /**
+     * Get up-sell slider products.
+     *
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    public function getProductCollectionUpSell()
+    {
+        if(!$this->_currentProduct) {
+            return [];
+        }
+        return $this->getUpSellProducts($this->_currentProduct);
+    }
+
+    /**
+     * Retrieve array of up sell products.
+     *
+     * @return array
+     */
+    public function getUpSellProducts($currentProduct)
+    {
+        if (!$currentProduct->hasUpSellProducts()) {
+            $products = [];
+            $_collection = $currentProduct->getUpSellProductCollection();
+            $_collection->addAttributeToSelect('*');
+            foreach ($_collection as $product) {
+                $products[] = $product;
+            }
+            $currentProduct->setUpSellProducts($products);
+        }
+
+        return $currentProduct->getData('up_sell_products');
+    }
+
+    /**
+     * Get cross-sell slider products.
+     *
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
+     */
+    public function getProductCollectionCrossSell()
+    {
+        if(!$this->_currentProduct) {
+            return [];
+        }
+
+        return $this->getCrossSellProducts($this->_currentProduct);
+    }
+
+    /**
+     * Retrieve array of cross sell products
+     *
+     * @return array
+     */
+    public function getCrossSellProducts($currentProduct)
+    {
+        if (!$currentProduct->hasCrossSellProducts()) {
+            $products = [];
+            $_collection = $currentProduct->getCrossSellProductCollection();
+            $_collection->addAttributeToSelect('*');
+            foreach ($_collection as $product) {
+                $products[] = $product;
+            }
+            $currentProduct->setCrossSellProducts($products);
+        }
+
+        return $currentProduct->getData('cross_sell_products');
+    }
+
+    /**
+     * Retrieve the products limit based on type.
+     *
+     * @param $type
+     * @return int
+     */
+    protected function _getProductLimit($type)
+    {
+        return $this->_helperProducts->getProductLimit($type);
+    }
+
+    /**
+     * Retrieve the products random sort flag based on type.
+     *
+     * @param $type
+     * @return mixed
+     */
+    protected function _getRandomSort($type)
+    {
+        return $this->_helperProducts->getRandomSort($type);
+    }
+
+    /**
+     * Get start of day date.
+     * @return string
+     */
+    public function getStartOfDayDate()
+    {
+        return $this->_localeDate->date()->setTime(0, 0, 0)->format('Y-m-d H:i:s');
+    }
+
+    /**
+     * Get end of day date.
+     * @return string
+     */
+    public function getEndOfDayDate()
+    {
+        return $this->_localeDate->date()->setTime(23, 59, 59)->format('Y-m-d H:i:s');
+    }
+
+    /**
+     * Retrieve the current store id.
+     * 
+     * @return int
+     */
+    public function getStoreId()
+    {
+        return $this->_storeManager->getStore()->getId();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/AbstractAction.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/AbstractAction.php
new file mode 100644
index 000000000..655dfdd12
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/AbstractAction.php
@@ -0,0 +1,142 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml;
+
+/**
+ * Abstract Action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+abstract class AbstractAction extends \Magento\Backend\App\Action
+{
+    const PARAM_ID = 'id';
+
+    /**
+     * @var \Magento\Backend\Helper\Js
+     */
+    protected $_jsHelper;
+
+    /**
+     * @var \Magento\Backend\Model\View\Result\ForwardFactory
+     */
+    protected $_resultForwardFactory;
+
+    /**
+     * @var \Magento\Framework\View\Result\LayoutFactory
+     */
+    protected $_resultLayoutFactory;
+
+    /**
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    protected $_resultPageFactory;
+
+    /**
+     * Banner factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\BannerFactory
+     */
+    protected $_bannerFactory;
+
+    /**
+     * Slider factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\SliderFactory
+     */
+    protected $_sliderFactory;
+
+    /**
+     * Banner Collection Factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory
+     */
+    protected $_bannerCollectionFactory;
+
+    /**
+     * Slider Collection Factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory
+     */
+    protected $_sliderCollectionFactory;
+
+    /**
+     * Registry object.
+     *
+     * @var \Magento\Framework\Registry
+     */
+    protected $_coreRegistry;
+
+    /**
+     * File Factory.
+     *
+     * @var \Magento\Framework\App\Response\Http\FileFactory
+     */
+    protected $_fileFactory;
+
+    /**
+     * @param \Magento\Backend\App\Action\Context                                        $context
+     * @param \Magento\Framework\Registry                                                $coreRegistry
+     * @param \Magento\Framework\App\Response\Http\FileFactory                           $fileFactory
+     * @param \Magento\Framework\View\Result\PageFactory                                 $resultPageFactory
+     * @param \Magento\Framework\View\Result\LayoutFactory                               $resultLayoutFactory
+     * @param \Magento\Backend\Model\View\Result\ForwardFactory                          $resultForwardFactory
+     * @param \Magento\Backend\Helper\Js                                                 $jsHelper
+     * @param \WeltPixel\OwlCarouselSlider\Model\BannerFactory                           $bannerFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\SliderFactory                           $sliderFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory  $bannerCollectionFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory  $sliderCollectionFactory
+     */
+    public function __construct(
+        \Magento\Backend\App\Action\Context $context,
+        \Magento\Framework\Registry $coreRegistry,
+        \Magento\Framework\App\Response\Http\FileFactory $fileFactory,
+        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
+        \Magento\Framework\View\Result\LayoutFactory $resultLayoutFactory,
+        \Magento\Backend\Model\View\Result\ForwardFactory $resultForwardFactory,
+        \Magento\Backend\Helper\Js $jsHelper,
+        \WeltPixel\OwlCarouselSlider\Model\BannerFactory $bannerFactory,
+        \WeltPixel\OwlCarouselSlider\Model\SliderFactory $sliderFactory,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory $bannerCollectionFactory,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory $sliderCollectionFactory
+    ) {
+        parent::__construct($context);
+
+        $this->_coreRegistry = $coreRegistry;
+        $this->_fileFactory = $fileFactory;
+        $this->_resultPageFactory = $resultPageFactory;
+        $this->_resultLayoutFactory = $resultLayoutFactory;
+        $this->_resultForwardFactory = $resultForwardFactory;
+        $this->_jsHelper = $jsHelper;
+        $this->_bannerFactory = $bannerFactory;
+        $this->_sliderFactory = $sliderFactory;
+        $this->_bannerCollectionFactory = $bannerCollectionFactory;
+        $this->_sliderCollectionFactory = $sliderCollectionFactory;
+    }
+
+    /**
+     * Get result redirect after add/edit action
+     *
+     * @param \Magento\Framework\Controller\Result\Redirect $resultRedirect
+     * @param null                                          $paramCrudId
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    protected function _getResultRedirect(\Magento\Framework\Controller\Result\Redirect $resultRedirect, $paramId = null)
+    {
+        $back = $this->getRequest()->getParam('back');
+
+        switch ($back) {
+            case 'new':
+                $resultRedirect->setPath('*/*/new', ['_current' => true]);
+                break;
+            case 'edit':
+                $resultRedirect->setPath('*/*/edit', ['id' => $paramId, '_current' => true]);
+                break;
+            default:
+                $resultRedirect->setPath('*/*/');
+        }
+
+        return $resultRedirect;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner.php
new file mode 100644
index 000000000..fffeb2310
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml;
+
+/**
+ * Banner Abstract Action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+abstract class Banner extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\AbstractAction
+{
+    const PARAM_ID = 'id';
+
+    /**
+     * Check if admin has permissions to visit banner pages.
+     *
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_banners');
+    }
+
+    /**
+     * Get result redirect after add/edit action
+     *
+     * @param \Magento\Framework\Controller\Result\Redirect $resultRedirect
+     * @param null                                          $paramCrudId
+     * @return \Magento\Framework\Controller\Result\Redirect
+     */
+    protected function _getResultRedirect(\Magento\Framework\Controller\Result\Redirect $resultRedirect, $paramId = null)
+    {
+        switch ($this->getRequest()->getParam('back')) {
+            case 'new':
+                $resultRedirect->setPath('*/*/new', ['_current' => true]);
+                break;
+            case 'edit':
+                $resultRedirect->setPath(
+                    '*/*/edit',
+                    [
+                        static::PARAM_ID   => $paramId,
+                        '_current'         => true,
+                        'loaded_slider_id' => $this->getRequest()->getParam('loaded_slider_id'),
+                        'saveandclose'     => $this->getRequest()->getParam('saveandclose'),
+                    ]
+                );
+                break;
+            default:
+                $resultRedirect->setPath('*/*/');
+        }
+
+        return $resultRedirect;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Delete.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Delete.php
new file mode 100644
index 000000000..5667a5039
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Delete.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+/**
+ * Delete Banner action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Delete extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        $bannerId = $this->getRequest()->getParam(static::PARAM_ID);
+
+        try {
+            $banner = $this->_bannerFactory->create()->setId($bannerId);
+            $banner->delete();
+            $this->messageManager->addSuccess(__('Delete successfully!'));
+        } catch (\Exception $e) {
+            $this->messageManager->addError($e->getMessage());
+        }
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        return $resultRedirect->setPath('*/*/');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Edit.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Edit.php
new file mode 100644
index 000000000..5a316f076
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Edit.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+/**
+ * Edit Banner action.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Edit extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $bannerId = $this->getRequest()->getParam('id');
+
+        $bannerModel = $this->_bannerFactory->create();
+
+        if ($bannerId) {
+            $bannerModel->load($bannerId);
+
+            if (!$bannerModel->getId()) {
+                /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+                $resultRedirect = $this->resultRedirectFactory->create();
+
+                return $resultRedirect->setPath('*/*/');
+            }
+        }
+
+        $formData = $this->_getSession()->getFormData(true);
+        if (!empty($formData)) {
+            $bannerModel->setData($formData);
+        }
+      
+        $this->_coreRegistry->register('banner', $bannerModel);
+
+        $this->_eventManager->dispatch(
+            'owlcarouselslider_edit_banner',
+            ['controller' => $this]
+        );
+
+        /** @var \Magento\Framework\View\Result\PageFactory $resultPage */
+        $resultPage = $this->_resultPageFactory->create();
+
+        return $resultPage;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportCsv.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportCsv.php
new file mode 100644
index 000000000..8e75aa7c2
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportCsv.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * ExportCsv action.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class ExportCsv extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $fileName = 'owlcarousel_banners.csv';
+
+        /** @var \\Magento\Framework\View\Result\Page $resultPage */
+        $resultPage = $this->_resultPageFactory->create();
+        $content = $resultPage->getLayout()
+            ->createBlock('WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Grid')->getCsv();
+
+        return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportExcel.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportExcel.php
new file mode 100644
index 000000000..de0f10212
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportExcel.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * ExportExcel action.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class ExportExcel extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $fileName = 'owlcarousel_banners.xls';
+
+        /** @var \\Magento\Framework\View\Result\Page $resultPage */
+        $resultPage = $this->_resultPageFactory->create();
+        $content = $resultPage->getLayout()
+            ->createBlock('WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Grid')->getExcel();
+
+        return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportXml.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportXml.php
new file mode 100644
index 000000000..02fab0c16
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/ExportXml.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * ExportXml action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class ExportXml extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $fileName = 'owlcarousel_banners.xml';
+
+        /** @var \\Magento\Framework\View\Result\Page $resultPage */
+        $resultPage = $this->_resultPageFactory->create();
+        $content = $resultPage->getLayout()
+            ->createBlock('WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Grid')->getXml();
+
+        return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Grid.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Grid.php
new file mode 100644
index 000000000..72307c9c8
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Grid.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+/**
+ * Banner grid action.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Grid extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        return $this->_resultLayoutFactory->create();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Index.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Index.php
new file mode 100644
index 000000000..432c16752
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Index.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+/**
+ * Banner Index action.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Index extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        if ($this->getRequest()->getQuery('ajax')) {
+            $resultForward = $this->_resultForwardFactory->create();
+            $resultForward->forward('grid');
+
+            return $resultForward;
+        }
+
+        $resultPage = $this->_resultPageFactory->create();
+
+        return $resultPage;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassDelete.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassDelete.php
new file mode 100644
index 000000000..4de58032c
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassDelete.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+/**
+ * MassDelete action.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class MassDelete extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     * 
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        $bannerIds = $this->getRequest()->getParam('banner');
+        if (!is_array($bannerIds) || empty($bannerIds)) {
+            $this->messageManager->addError(__('Please select banner(s).'));
+        } else {
+            $bannerCollection = $this->_bannerCollectionFactory->create()
+                ->addFieldToFilter('id', ['in' => $bannerIds]);
+            try {
+                foreach ($bannerCollection as $banner) {
+                    $banner->delete();
+                }
+                $this->messageManager->addSuccess(
+                    __('A total of %1 banner(s) have been deleted.', count($bannerIds))
+                );
+            } catch (\Exception $e) {
+                $this->messageManager->addError($e->getMessage());
+            }
+        }
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        return $resultRedirect->setPath('*/*/');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassStatus.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassStatus.php
new file mode 100644
index 000000000..3dfe8d703
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/MassStatus.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+/**
+ * MassStatus action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class MassStatus extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        $bannerIds = $this->getRequest()->getParam('banner');
+        $status = $this->getRequest()->getParam('status');
+
+        if (!is_array($bannerIds) || empty($bannerIds)) {
+            $this->messageManager->addError(__('Please select banner(s).'));
+        } else {
+            $bannerCollection = $this->_bannerCollectionFactory->create()
+                ->addFieldToFilter('id', ['in' => $bannerIds]);
+            try {
+                foreach ($bannerCollection as $banner) {
+                    $banner->setStatus($status)
+                        ->setIsMassupdate(true)
+                        ->save();
+                }
+                $this->messageManager->addSuccess(
+                    __('A total of %1 banner(s) status have been changed.', count($bannerIds))
+                );
+            } catch (\Exception $e) {
+                $this->messageManager->addError($e->getMessage());
+            }
+        }
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        return $resultRedirect->setPath('*/*/', ['store' => $this->getRequest()->getParam('store')]);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/NewAction.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/NewAction.php
new file mode 100644
index 000000000..0da8b354f
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/NewAction.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+/**
+ * NewAction
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class NewAction extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $resultForward = $this->_resultForwardFactory->create();
+
+        return $resultForward->forward('edit');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Save.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Save.php
new file mode 100644
index 000000000..520c43685
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Banner/Save.php
@@ -0,0 +1,120 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * Save Banner action.
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Save extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Banner
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        $data = $this->getRequest()->getPostValue();
+
+        if ($data) {
+            $bannerModel = $this->_bannerFactory->create();
+
+            $bannerId = $this->getRequest()->getParam(static::PARAM_ID);
+
+            if ($bannerId) {
+                $bannerModel->load($bannerId);
+            }
+
+            $bannerImage = $this->getRequest()->getFiles('image');
+
+            $fileName = ($bannerImage && array_key_exists('name', $bannerImage)) ? $bannerImage['name'] : null;
+
+            if ($bannerImage && $fileName) {
+                try {
+                    /** @var \Magento\Framework\ObjectManagerInterface $uploader */
+                    $uploader = $this->_objectManager->create(
+                        'Magento\MediaStorage\Model\File\Uploader',
+                        ['fileId' => 'image']
+                    );
+
+                    $uploader->setAllowedExtensions(['jpg', 'jpeg', 'gif', 'png']);
+
+                    /** @var \Magento\Framework\Image\Adapter\AdapterInterface $imageAdapterFactory */
+                    $imageAdapterFactory = $this->_objectManager->get('Magento\Framework\Image\AdapterFactory')
+                        ->create();
+
+                    $uploader->addValidateCallback('banner_image', $imageAdapterFactory, 'validateUploadFile');
+                    $uploader->setAllowRenameFiles(true);
+                    $uploader->setFilesDispersion(true);
+
+                    /** @var \Magento\Framework\Filesystem\Directory\Read $mediaDirectory */
+                    $mediaDirectory = $this->_objectManager->get('Magento\Framework\Filesystem')
+                        ->getDirectoryRead(DirectoryList::MEDIA);
+
+                    $result = $uploader->save(
+                        $mediaDirectory
+                            ->getAbsolutePath(\WeltPixel\OwlCarouselSlider\Model\Banner::OWLCAROUSELSLIDER_MEDIA_PATH)
+                    );
+
+                    $data['image'] = \WeltPixel\OwlCarouselSlider\Model\Banner::OWLCAROUSELSLIDER_MEDIA_PATH
+                        . $result['file'];
+
+                } catch (\Exception $e) {
+                    if ($e->getCode() == 0) {
+                        $this->messageManager->addError($e->getMessage());
+                    }
+                }
+            } else {
+                if (isset($data['image']) && isset($data['image']['value'])) {
+                    if (isset($data['image']['delete'])) {
+                        $data['image'] = null;
+                        $data['delete_image'] = true;
+                    } elseif (isset($data['image']['value'])) {
+                        $data['image'] = $data['image']['value'];
+                    }
+                }
+            }
+
+            /** @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate */
+            $localeDate = $this->_objectManager->get('Magento\Framework\Stdlib\DateTime\TimezoneInterface');
+
+            $data['valid_from'] = $localeDate->date($data['valid_from'])
+                ->setTimezone(new \DateTimeZone('UTC'))->format('Y-m-d H:i');
+            $data['valid_to'] = $localeDate->date($data['valid_to'])
+                ->setTimezone(new \DateTimeZone('UTC'))->format('Y-m-d H:i');
+
+            $bannerModel->setData($data);
+
+            try {
+                $bannerModel->save();
+
+                $this->messageManager->addSuccess(__('The banner has been saved.'));
+                $this->_getSession()->setFormData(false);
+
+                return $this->_getResultRedirect($resultRedirect, $bannerModel->getId());
+
+            } catch (\Exception $e) {
+                $this->messageManager->addException($e, __('Something went wrong while saving the banner.'));
+                $this->messageManager->addError($e->getMessage());
+            }
+
+            $this->_getSession()->setFormData($data);
+
+            return $resultRedirect->setPath(
+                '*/*/edit',
+                [static::PARAM_ID => $bannerId]
+            );
+        }
+
+        return $resultRedirect->setPath('*/*/');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider.php
new file mode 100644
index 000000000..6597573da
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml;
+
+/**
+ * Slider Abstract Action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+abstract class Slider extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\AbstractAction
+{
+    const PARAM_ID = 'id';
+
+    /**
+     * Check if admin has permissions to visit slider pages.
+     *
+     * @return bool
+     */
+    protected function _isAllowed()
+    {
+        return $this->_authorization->isAllowed('WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_sliders');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Banners.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Banners.php
new file mode 100644
index 000000000..46d45e455
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Banners.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Banners of slider action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Banners extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $resultLayout = $this->_resultLayoutFactory->create();
+        
+        $resultLayout
+            ->getLayout()->getBlock('owlcarouselslider.slider.edit.tab.banners')
+            ->setInBanner($this->getRequest()->getPost('banner', null));
+
+        return $resultLayout;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/BannersGrid.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/BannersGrid.php
new file mode 100644
index 000000000..53e2a87f7
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/BannersGrid.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Banners Grid action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class BannersGrid extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $resultLayout = $this->_resultLayoutFactory->create();
+        
+        $resultLayout
+            ->getLayout()->getBlock('owlcarouselslider.slider.edit.tab.banners')
+            ->setInBanner($this->getRequest()->getPost('banner', null));
+
+        return $resultLayout;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Delete.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Delete.php
new file mode 100644
index 000000000..8a95c36e8
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Delete.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Delete Slider action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Delete extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $sliderId = $this->getRequest()->getParam(static::PARAM_ID);
+        try {
+            $slider = $this->_sliderFactory->create()->setId($sliderId);
+            $slider->delete();
+            $this->messageManager->addSuccess(
+                __('Delete successfully !')
+            );
+        } catch (\Exception $e) {
+            $this->messageManager->addError($e->getMessage());
+        }
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        return $resultRedirect->setPath('*/*/');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Edit.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Edit.php
new file mode 100644
index 000000000..3577050df
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Edit.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Edit Slider action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Edit extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        $resultPage = $this->_resultPageFactory->create();
+
+        $id = $this->getRequest()->getParam('id');
+        $model = $this->_sliderFactory->create();
+
+        if ($id) {
+            $model->load($id);
+            if (!$model->getId()) {
+                $this->messageManager->addError(__('This slider no longer exists.'));
+                $resultRedirect = $this->resultRedirectFactory->create();
+
+                return $resultRedirect->setPath('*/*/');
+            }
+        }
+
+        $data = $this->_getSession()->getFormData(true);
+
+        if (!empty($data)) {
+            $model->setData($data);
+        }
+        $this->_coreRegistry->register('slider', $model);
+
+        return $resultPage;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportCsv.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportCsv.php
new file mode 100644
index 000000000..55536e8b7
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportCsv.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * Export Csv action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class ExportCsv extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $fileName = 'owlcarousel_sliders.csv';
+
+        /** @var \\Magento\Framework\View\Result\Page $resultPage */
+        $resultPage = $this->_resultPageFactory->create();
+        $content = $resultPage->getLayout()
+            ->createBlock('WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Grid')->getCsv();
+
+        return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportExcel.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportExcel.php
new file mode 100644
index 000000000..e5ba1a74b
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportExcel.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * Export Excel action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class ExportExcel extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $fileName = 'owlcarousel_sliders.xls';
+
+        /** @var \\Magento\Framework\View\Result\Page $resultPage */
+        $resultPage = $this->_resultPageFactory->create();
+        $content = $resultPage->getLayout()
+            ->createBlock('WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Grid')->getExcel();
+
+        return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportXml.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportXml.php
new file mode 100644
index 000000000..99969b3f4
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/ExportXml.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+/**
+ * ExportXml action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class ExportXml extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $fileName = 'owlcarousel_sliders.xml';
+
+        /** @var \\Magento\Framework\View\Result\Page $resultPage */
+        $resultPage = $this->_resultPageFactory->create();
+        $content = $resultPage->getLayout()
+            ->createBlock('WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Grid')->getXml();
+
+        return $this->_fileFactory->create($fileName, $content, DirectoryList::VAR_DIR);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Grid.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Grid.php
new file mode 100644
index 000000000..c3c2e30e3
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Grid.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Slider Grid action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Grid extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        return $this->_resultLayoutFactory->create();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Index.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Index.php
new file mode 100644
index 000000000..0d27d0b38
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Index.php
@@ -0,0 +1,32 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Slider Index action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Index extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        if ($this->getRequest()->getQuery('ajax')) {
+            $resultForward = $this->_resultForwardFactory->create();
+            $resultForward->forward('grid');
+
+            return $resultForward;
+        }
+
+        $resultPage = $this->_resultPageFactory->create();
+
+        return $resultPage;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassDelete.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassDelete.php
new file mode 100644
index 000000000..ed1bb5bdf
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassDelete.php
@@ -0,0 +1,43 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Mass Delete Slider action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class MassDelete extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        $sliderIds = $this->getRequest()->getParam('slider');
+        
+        if (!is_array($sliderIds) || empty($sliderIds)) {
+            $this->messageManager->addError(__('Please select slider(s).'));
+        } else {
+            $sliderCollection = $this->_sliderCollectionFactory->create()
+                ->addFieldToFilter('id', ['in' => $sliderIds]);
+            try {
+                foreach ($sliderCollection as $slider) {
+                    $slider->delete();
+                }
+                $this->messageManager->addSuccess(
+                    __('A total of %1 slider(s) have been deleted.', count($sliderIds))
+                );
+            } catch (\Exception $e) {
+                $this->messageManager->addError($e->getMessage());
+            }
+        }
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        return $resultRedirect->setPath('*/*/');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassStatus.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassStatus.php
new file mode 100644
index 000000000..97e2351f7
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/MassStatus.php
@@ -0,0 +1,47 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * Mass Status action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class MassStatus extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        $sliderIds = $this->getRequest()->getParam('slider');
+        $status = $this->getRequest()->getParam('status');
+        
+        if (!is_array($sliderIds) || empty($sliderIds)) {
+            $this->messageManager->addError(__('Please select slider(s).'));
+        } else {
+            try {
+                $sliderCollection = $this->_sliderCollectionFactory->create()
+                    ->addFieldToFilter('id', ['in' => $sliderIds]);
+
+                foreach ($sliderCollection as $slider) {
+                    $slider->setStatus($status)
+                        ->setIsMassupdate(true)
+                        ->save();
+                }
+                $this->messageManager->addSuccess(
+                    __('A total of %1 slider(s) status have been changed.', count($sliderIds))
+                );
+            } catch (\Exception $e) {
+                $this->messageManager->addError($e->getMessage());
+            }
+        }
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        return $resultRedirect->setPath('*/*/');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/NewAction.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/NewAction.php
new file mode 100644
index 000000000..9bf20c88f
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/NewAction.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+/**
+ * New Slider Action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class NewAction extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     */
+    public function execute()
+    {
+        $resultForward = $this->_resultForwardFactory->create();
+
+        return $resultForward->forward('edit');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Save.php b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Save.php
new file mode 100644
index 000000000..dbd59fe77
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Controller/Adminhtml/Slider/Save.php
@@ -0,0 +1,86 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider;
+
+use WeltPixel\OwlCarouselSlider\Model\Slider;
+
+/**
+ * Save Slider action
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Save extends \WeltPixel\OwlCarouselSlider\Controller\Adminhtml\Slider
+{
+    /**
+     * Dispatch request
+     *
+     * @var \Magento\Framework\View\Result\PageFactory
+     */
+    public function execute()
+    {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        $formPostValues = $this->getRequest()->getPostValue();
+
+        if (isset($formPostValues['slider'])) {
+            $sliderData = $formPostValues['slider'];
+            $sliderId = isset($sliderData['id']) ? $sliderData['id'] : null;
+
+            $sliderModel = $this->_sliderFactory->create();
+
+            $sliderModel->load($sliderId);
+
+            $sliderModel->setData($sliderData);
+
+            try {
+                $sliderModel->save();
+
+                if (isset($formPostValues['slider_banner'])) {
+                    $bannerGridSerializedInputData = $this->_jsHelper->decodeGridSerializedInput($formPostValues['slider_banner']);
+                    $bannerIds = [];
+                    foreach ($bannerGridSerializedInputData as $key => $value) {
+                        $bannerIds[] = $key;
+                        $bannerOrders[] = $value['sort_order'];
+                    }
+
+                    $unSelecteds = $this->_bannerCollectionFactory
+                        ->create()
+                        ->addFieldToFilter('slider_id', $sliderModel->getId());
+
+                    if (count($bannerIds)) {
+                        $unSelecteds->addFieldToFilter('id', ['nin' => $bannerIds]);
+                    }
+
+                    foreach ($unSelecteds as $banner) {
+                        $banner->setSliderId(0)
+                            ->setSortOrder(0)->save();
+                    }
+
+                    $selectBanner = $this->_bannerCollectionFactory
+                        ->create()
+                        ->addFieldToFilter('id', ['in' => $bannerIds]);
+                    $i = -1;
+                    foreach ($selectBanner as $banner) {
+                        $banner->setSliderId($sliderModel->getId())
+                            ->setSortOrder($bannerOrders[++$i])->save();
+                    }
+                }
+
+                $this->messageManager->addSuccess(__('The slider has been saved.'));
+                $this->_getSession()->setFormData(false);
+
+                return $this->_getResultRedirect($resultRedirect, $sliderModel->getId());
+            } catch (\Exception $e) {
+                $this->messageManager->addError($e->getMessage());
+                $this->messageManager->addException($e, __('Something went wrong while saving the slider.'));
+            }
+
+            $this->_getSession()->setFormData($formPostValues);
+
+            return $resultRedirect->setPath('*/*/edit', [static::PARAM_CRUD_ID => $sliderId]);
+        }
+
+        return $resultRedirect->setPath('*/*/');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Helper/Custom.php b/app/code/WeltPixel/OwlCarouselSlider/Helper/Custom.php
new file mode 100644
index 000000000..4d3af3c86
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Helper/Custom.php
@@ -0,0 +1,236 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Helper;
+
+/**
+ * Helper Custom Slider
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Custom extends \Magento\Framework\App\Helper\AbstractHelper
+{
+    /**
+     * Slider factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\Slider
+     */
+    protected $_sliderModel;
+
+    protected $_configFieldsSlider;
+
+    protected $_configFieldsBanner;
+
+    protected $_sliderId;
+
+    protected $_date;
+
+    protected $_scopeConfig;
+
+    /**
+     * @param \Magento\Framework\App\Helper\Context              $context
+     * @param \WeltPixel\OwlCarouselSlider\Model\Slider          $sliderModel
+     */
+    public function __construct(
+        \Magento\Framework\App\Helper\Context $context,
+        \WeltPixel\OwlCarouselSlider\Model\Slider $sliderModel,
+        \Magento\Framework\Stdlib\DateTime\DateTime $date
+    ) {
+        parent::__construct($context);
+
+        $this->_sliderModel = $sliderModel;
+        $this->_date        = $date;
+        $this->_scopeConfig = $context->getScopeConfig();
+    }
+
+    /**
+     * Retrieve the slider config options.
+     *
+     * @param $sliderId
+     * @return \Magento\Framework\DataObject
+     */
+    public function getSliderConfigOptions($sliderId)
+    {
+        if($this->_sliderId != $sliderId && is_null($this->_configFieldsSlider)) {
+
+            $this->_sliderId = $sliderId;
+
+            $this->_configFieldsSlider = [
+                'title',
+                'show_title',
+                'status',
+                'nav',
+                'dots',
+                'center',
+                'items',
+                'loop',
+                'margin',
+                'merge',
+                'URLhashListener',
+                'stagePadding',
+                'lazyLoad',
+                'transition',
+                'autoplay',
+                'autoplayTimeout',
+                'autoplayHoverPause',
+                'autoHeight',
+                'nav_brk1',
+                'items_brk1',
+                'nav_brk2',
+                'items_brk2',
+                'nav_brk3',
+                'items_brk3',
+                'nav_brk4',
+                'items_brk4',
+            ];
+        }
+        if(is_null($this->_configFieldsBanner)) {
+            $this->_configFieldsBanner = [
+                'id',
+                'title',
+                'show_title',
+                'description',
+                'show_description',
+                'status',
+                'url',
+                'banner_type',
+                'image',
+                'video',
+                'custom',
+                'alt_text',
+                'target',
+                'button_text',
+                'custom_content',
+                'custom_css',
+                'valid_from',
+                'valid_to',
+                'ga_promo_id',
+                'ga_promo_name',
+                'ga_promo_creative',
+                'ga_promo_position'
+            ];
+        }
+
+        /* @var \WeltPixel\OwlCarouselSlider\Model\Slider $slider */
+        $slider = $this->_sliderModel->load($sliderId);
+
+        if (!count($this->_configFieldsSlider)) {
+            return new \Magento\Framework\DataObject();
+        }
+
+        $sliderConfig = [];
+        foreach ($this->_configFieldsSlider as $field) {
+            $sliderConfig[$field] = $slider->getData($field);
+        }
+
+        $sliderBannersCollection = $slider->getSliderBanerCollection();
+        $sliderBannersCollection->setOrder('sort_order', 'ASC');
+
+        $bannerConfig = [];
+        foreach ($sliderBannersCollection as $banner) {
+
+            if (!$this->validateBannerDisplayDate($banner) || !$banner->getStatus()) {
+                continue;
+            }
+
+            $bannerDetails = [];
+            foreach ($this->_configFieldsBanner as $field) {
+                $bannerDetails[$field] = $banner->getData($field);
+            }
+            $bannerConfig[$banner->getId()] = $bannerDetails;
+        }
+
+        $configData = new \Magento\Framework\DataObject();
+
+        $configData->setSliderConfig($sliderConfig);
+        $configData->setBannerConfig($bannerConfig);
+
+        return $configData;
+    }
+
+    /**
+     * Retrieve the breakpoint configuration.
+     * 
+     * @return array
+     */
+    public function getBreakpointConfiguration()
+    {
+        $configPaths = [
+            'breakpoint_1',
+            'breakpoint_2',
+            'breakpoint_3',
+            'breakpoint_4',
+        ];
+
+        $breakpointConfiguration = [];
+
+        foreach ($configPaths as $configPath) {
+            $value = $this->_getConfigValue($configPath);
+            $breakpointConfiguration[$configPath] = $value ? $value : 0;
+        }
+
+        return $breakpointConfiguration;
+    }
+
+    /**
+     * Retrieve the breakpoint configuration.
+     *
+     * @return array
+     */
+    public function getDisplaySocial()
+    {
+        $configPaths = [
+            'display_wishlist',
+            'display_compare'
+        ];
+
+        $displaySocial = [];
+
+        foreach ($configPaths as $configPath) {
+            $value = $this->_getConfigValue($configPath);
+	        $displaySocial[$configPath] = $value ? $value : 0;
+        }
+
+        return $displaySocial;
+    }
+
+    /**
+     * Retrieve the config value.
+     *
+     * @param string $configPath
+     * @return mixed
+     */
+    private function _getConfigValue($configPath)
+    {
+        $sysPath = 'weltpixel_owl_carousel_config/general/' . $configPath;
+
+        return $this->_scopeConfig->getValue($sysPath, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
+    }
+
+    /**
+     * Validate the banner display date.
+     *
+     * @param \WeltPixel\OwlCarouselSlider\Model\Banner $banner
+     * @return bool
+     */
+    public function validateBannerDisplayDate($banner)
+    {
+        $validFrom = $banner->getValidFrom();
+        $validTo   = $banner->getValidTo();
+
+        $now = $this->_date->gmtDate();
+
+        if ($validFrom <= $now && $validTo >= $now) {
+            return true;
+        }
+
+        return false;
+    }
+
+    public function isGatEnabled()
+    {
+        $sysPath = 'weltpixel_owl_slider_config/general/enable_google_tracking';
+        return $this->_scopeConfig->getValue($sysPath, \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Helper/Data.php b/app/code/WeltPixel/OwlCarouselSlider/Helper/Data.php
new file mode 100644
index 000000000..40da90c75
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Helper/Data.php
@@ -0,0 +1,75 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Helper;
+
+/**
+ * Helper Data
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Data extends \Magento\Framework\App\Helper\AbstractHelper
+{
+    /**
+     * @var \Magento\Backend\Model\UrlInterface
+     */
+    protected $_backendUrl;
+
+    /**
+     * [__construct description].
+     *
+     * @param \Magento\Framework\App\Helper\Context          $context
+     * @param \Magento\Store\Model\StoreManagerInterface     $storeManager
+     */
+    public function __construct(
+        \Magento\Framework\App\Helper\Context $context,
+        \Magento\Backend\Model\UrlInterface $backendUrl
+    ) {
+        parent::__construct($context);
+
+        $this->_backendUrl = $backendUrl;
+    }
+
+    /**
+     * get Slider Banner Url
+     * @return string
+     */
+    public function getSliderBannerUrl()
+    {
+        return $this->_backendUrl->getUrl('*/*/banners', ['_current' => true]);
+    }
+
+    /**
+     * Retrieve the related products.
+     *
+     * @param $product
+     * @return mixed
+     */
+    public function getRelatedProducts($product)
+    {
+        return $product->getRelatedProducts();
+    }
+
+    /**
+     * Retrieve the up-sell products.
+     *
+     * @param $product
+     * @return mixed
+     */
+    public function getUpsellProducts($product)
+    {
+        return $product->getUpSellProducts();
+    }
+
+    /**
+     * Retrieve the cross-sell products.
+     *
+     * @param $product
+     * @return mixed
+     */
+    public function getCrosssellProducts($product)
+    {
+        return $product->getCrossSellProducts();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Helper/Products.php b/app/code/WeltPixel/OwlCarouselSlider/Helper/Products.php
new file mode 100644
index 000000000..c3e7db859
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Helper/Products.php
@@ -0,0 +1,160 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Helper;
+
+/**
+ * Helper Products Slider
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Products extends \Magento\Framework\App\Helper\AbstractHelper
+{
+    protected $_scopeConfig;
+
+    const SYS_PATH = 'weltpixel_owl_carousel_config/';
+
+    /**
+     * @param \Magento\Framework\App\Helper\Context  $context
+     */
+    public function __construct(
+        \Magento\Framework\App\Helper\Context $context
+    ) {
+        parent::__construct($context);
+
+        $this->_scopeConfig = $context->getScopeConfig();
+    }
+
+    /**
+     * Retrieve the slider config options.
+     *
+     * @param $type
+     * @return array
+     */
+    public function getSliderConfigOptions($type)
+    {
+        $configFields = [
+            'status',
+            'title',
+            'show_price',
+            'show_addto',
+            'show_wishlist',
+            'show_compare',
+            'nav',
+            'dots',
+            'center',
+            'items',
+            'loop',
+            'margin',
+            'merge',
+            'URLhashListener',
+            'stagePadding',
+            'lazyLoad',
+            'autoplay',
+            'autoplayTimeout',
+            'autoplayHoverPause',
+
+            'nav_brk1',
+            'dots_brk1',
+            'items_brk1',
+            'center_brk1',
+            'stagePadding_brk1',
+            
+            'nav_brk2',
+            'dots_brk2',
+            'items_brk2',
+            'center_brk2',
+            'stagePadding_brk2',
+
+            'nav_brk3',
+            'dots_brk3',
+            'items_brk3',
+            'center_brk3',
+            'stagePadding_brk3',
+            
+            'nav_brk4',
+            'dots_brk4',
+            'items_brk4',
+            'center_brk4',
+            'stagePadding_brk4',
+        ];
+
+        $sliderConfig = [];
+        $sysPath = self::SYS_PATH . $type;
+
+        foreach ($configFields as $field) {
+            $configPath = $sysPath . '/' . $field;
+            $sliderConfig[$field] = $this->_getConfigValue($configPath);
+        }
+
+        return $sliderConfig;
+    }
+
+    /**
+     * Retrieve the config value.
+     *
+     * @param string $configPath
+     * @return mixed
+     */
+    private function _getConfigValue($configPath)
+    {
+        return $this->_scopeConfig->getValue(
+            $configPath,
+            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+        );
+    }
+
+    /**
+     * Retrieve the product limit config value.
+     *
+     * @param string $type
+     * @return int
+     */
+    public function getProductLimit($type)
+    {
+        $configPath = self::SYS_PATH . $type . '/max_items';
+        
+        return (int)$this->_getConfigValue($configPath);
+    }
+
+    /**
+     * Retrieve the random sort config value.
+     *
+     * @param string $type
+     * @return int
+     */
+    public function getRandomSort($type)
+    {
+        $configPath = self::SYS_PATH . $type . '/random_sort';
+
+        return $this->_getConfigValue($configPath);
+    }
+
+    /**
+     * Retrieve the slider configuration.
+     *
+     * @param string $type
+     * @return array
+     */
+    public function getSliderConfiguration($type)
+    {
+        switch($type){
+            case 'related':
+            case 'related-rule':
+                $type = 'related_products';
+                break;
+            case 'upsell':
+            case 'upsell-rule':
+                $type = 'upsell_products';
+                break;
+            case 'crosssell':
+                $type = 'crosssell_products';
+                break;
+            default:
+                $type = 'related_products';
+        }
+
+        return $this->getSliderConfigOptions($type);
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Banner.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Banner.php
new file mode 100644
index 000000000..b45703c61
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Banner.php
@@ -0,0 +1,127 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Model;
+
+/**
+ * Banner Model
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Banner extends \Magento\Framework\Model\AbstractModel
+{
+    const OWLCAROUSELSLIDER_MEDIA_PATH = 'weltpixel/owlcarouselslider/images';
+
+    /**
+     * slider colleciton factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory
+     */
+    protected $_sliderCollectionFactory;
+
+    /**
+     * [$_formFieldHtmlIdPrefix description].
+     *
+     * @var string
+     */
+    protected $_formFieldHtmlIdPrefix = 'page_';
+
+    /**
+     * logger.
+     *
+     * @var \Magento\Framework\Logger\Monolog
+     */
+    protected $_monolog;
+
+    protected $_bannerFactory;
+
+    /**
+     * [__construct description].
+     *
+     * @param \Magento\Framework\Model\Context                                          $context
+     * @param \Magento\Framework\Registry                                               $registry
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner                   $resource
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\Collection        $resourceCollection
+     * @param \WeltPixel\OwlCarouselSlider\Model\BannerFactory                          $bannerFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory $sliderCollectionFactory
+     * @param \Magento\Store\Model\StoreManagerInterface                                $storeManager
+     */
+    public function __construct(
+        \Magento\Framework\Model\Context $context,
+        \Magento\Framework\Registry $registry,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner $resource,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\Collection $resourceCollection,
+        \WeltPixel\OwlCarouselSlider\Model\BannerFactory $bannerFactory,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory $sliderCollectionFactory,
+        \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Logger\Monolog $monolog
+    ) {
+        parent::__construct($context, $registry, $resource, $resourceCollection);
+
+        $this->_bannerFactory = $bannerFactory;
+        $this->_sliderCollectionFactory = $sliderCollectionFactory;
+        $this->_monolog = $monolog;
+    }
+
+    /**
+     * Return the form field html id prefix.
+     *
+     * @return string
+     */
+    public function getFormFieldHtmlIdPrefix()
+    {
+        return $this->_formFieldHtmlIdPrefix;
+    }
+
+    /**
+     * Return the available sliders.
+     *
+     * @return []
+     */
+    public function getAvailableSliders()
+    {
+        $option[] = [
+            'value' => '',
+            'label' => __('--- Please select a slider ---'),
+        ];
+
+        $sliders = $this->_sliderCollectionFactory->create();
+
+        if(count($sliders)) {
+            foreach ($sliders as $slider) {
+                $option[] = [
+                    'value' => $slider->getId(),
+                    'label' => $slider->getTitle(),
+                ];
+            }
+        }
+
+        return $option;
+    }
+
+    /**
+     * Return the available banners type.
+     *
+     * @return []
+     */
+    public function getAvailableBannerType()
+    {
+        $options = [];
+        $options[] = [
+            'value' => 1,
+            'label' => __('Image'),
+        ];
+        $options[] = [
+            'value' => 2,
+            'label' => __('Video'),
+        ];
+        $options[] = [
+            'value' => 3,
+            'label' => __('Custom'),
+        ];
+
+
+        return $options;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Categories.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Categories.php
new file mode 100644
index 000000000..2d4fb737a
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Categories.php
@@ -0,0 +1,97 @@
+<?php
+
+/**
+ * Used in creating options for category config value selection
+ *
+ */
+namespace WeltPixel\OwlCarouselSlider\Model\Config\Source;
+
+class Categories implements \Magento\Framework\Option\ArrayInterface
+{
+    protected $_categoryHelper;
+    protected $categoryFlatConfig;
+    /**
+     * @param \Magento\Framework\View\Element\Template\Context    $context
+     * @param \Magento\Catalog\Helper\Category                    $categoryHelper
+     * @param array $data
+     */
+    public function __construct(
+        \Magento\Framework\View\Element\Template\Context $context,
+        \Magento\Catalog\Helper\Category $categoryHelper,
+        \Magento\Catalog\Model\Indexer\Category\Flat\State $categoryFlatState
+    ) {
+        $this->_categoryHelper    = $categoryHelper;
+        $this->categoryFlatConfig = $categoryFlatState;
+    }
+
+    /**
+     * Retrieve current store categories
+     *
+     * @param bool|string $sorted
+     * @param bool $asCollection
+     * @param bool $toLoad
+     * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\Resource\Category\Collection|array
+     */
+    public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true)
+    {
+        return $categories = $this->_categoryHelper->getStoreCategories($sorted , $asCollection, $toLoad);
+    }
+
+    /**
+     * Retrieve child store categories
+     *
+     * @param $category
+     * @param null $arr
+     * @return null|array
+     */
+    public function getChildCategories($category, $arr=null)
+    {
+        if ($this->categoryFlatConfig->isFlatEnabled() && $category->getUseFlatResource()) {
+            $subcategories = (array)$category->getChildrenNodes();
+        } else {
+            $subcategories = $category->getChildren();
+        }
+
+        foreach ($subcategories as $subcategory) {
+            $arr[$subcategory->getEntityId()] = $subcategory;
+            $subcat = $this->getChildCategories($subcategory, $arr);
+
+            foreach ($subcat as $cat) {
+                $arr[$cat->getEntityId()] = $cat;
+            }
+        }
+
+        return $arr;
+    }
+
+    /**
+     * Options getter
+     *
+     * @return array
+     */
+    public function toOptionArray()
+    {
+        $categories = $this->getStoreCategories();
+        $options = [];
+
+        foreach ($categories as $category) {
+            $childCategories = $this->getChildCategories($category);
+
+            $options[] = [
+                'label' => $category->getName(),
+                'value' => $category->getEntityId(),
+            ];
+            
+            if ($childCategories) {
+                foreach ($childCategories as $id=>$childX) {
+                    $options[] = [
+                        'label' => str_repeat("_", $childX->getLevel()-2) . $childX->getName(),
+                        'value' => $childX->getEntityId(),
+                    ];
+                }
+            }
+        }
+
+        return $options;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Sortby.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Sortby.php
new file mode 100644
index 000000000..501a3b779
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Sortby.php
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Used in creating options for category config value selection
+ *
+ */
+namespace WeltPixel\OwlCarouselSlider\Model\Config\Source;
+
+class Sortby implements \Magento\Framework\Option\ArrayInterface
+{
+    /**
+     * Options getter
+     *
+     * @return array
+     */
+    public function toOptionArray()
+    {
+        return [
+            [
+                'label' => __('Default Magento'),
+                'value' => '1',
+            ],
+            [
+                'label' => __('Specific Category'),
+                'value' => '2',
+            ],
+            [
+                'label' => __('Default Magento & Specific Category'),
+                'value' => '3',
+            ],
+
+        ];
+    }
+
+    /**
+     * Get options in "key-value" format
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        return [
+            1 => __('Default Magento'),
+            2 => __('Specific Category'),
+            3 => __('Default Magento & Specific Category'),
+        ];
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Truefalse.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Truefalse.php
new file mode 100644
index 000000000..13aee1669
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/Truefalse.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Used in creating options for true/false config value selection
+ *
+ */
+namespace WeltPixel\OwlCarouselSlider\Model\Config\Source;
+
+class Truefalse implements \Magento\Framework\Option\ArrayInterface
+{
+    /**
+     * Options getter
+     *
+     * @return array
+     */
+    public function toOptionArray()
+    {
+        return [
+            [
+                'label' => __('True'),
+                'value' => '1',
+            ],
+            [
+                'label' => __('False'),
+                'value' => '0',
+            ],
+        ];
+    }
+
+    /**
+     * Get options in "key-value" format
+     *
+     * @return array
+     */
+    public function toArray()
+    {
+        return [
+            1 => __('True'),
+            0 => __('False'),
+        ];
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetCustom.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetCustom.php
new file mode 100644
index 000000000..b85beeeec
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetCustom.php
@@ -0,0 +1,61 @@
+<?php
+namespace WeltPixel\OwlCarouselSlider\Model\Config\Source;
+
+class WidgetCustom extends \Magento\Framework\Model\AbstractModel implements \Magento\Framework\Option\ArrayInterface
+{
+
+    /**
+     * slider factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory
+     */
+    protected $_slideCollectionFactory;
+
+    /**
+     * [__construct description].
+     *
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory   $slideCollectionFactory
+     */
+    public function __construct(
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\CollectionFactory $slideCollectionFactory
+
+    ) {
+        $this->_slideCollectionFactory = $slideCollectionFactory;
+    }
+
+    /**
+     * Retrieve the slider collection.
+     *
+     * @return \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\Collection
+     */
+    public function getSliderCollection()
+    {
+        $collection = $this->_slideCollectionFactory->create();
+
+        return $collection;
+    }
+
+    /**
+     * Return array of options as value-label pairs
+     *
+     * @return array Format: array(array('value' => '<value>', 'label' => '<label>'), ...)
+     */
+    public function toOptionArray()
+    {
+        $sliderCollection = $this->getSliderCollection();
+
+        $values = [];
+
+        $values[] = [
+            'value' => 0, 'label' => __('Select Custom Slider...')
+        ];
+        
+        foreach ($sliderCollection as $slider) {
+            $values[] = [
+                'value' => $slider->getId(), 'label' => $slider->getTitle()
+            ];
+        }
+
+        return $values;
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetProducts.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetProducts.php
new file mode 100644
index 000000000..00b5234c9
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Config/Source/WidgetProducts.php
@@ -0,0 +1,24 @@
+<?php
+namespace WeltPixel\OwlCarouselSlider\Model\Config\Source;
+
+class WidgetProducts implements \Magento\Framework\Option\ArrayInterface
+{
+    /**
+     * Return array of options as value-label pairs
+     *
+     * @return array Format: array(array('value' => '<value>', 'label' => '<label>'), ...)
+     */
+    public function toOptionArray()
+    {
+        return [
+            ['value' => '0', 'label' => __('Select Products Slider...')],
+            ['value' => 'new_products', 'label' => __('New Products')],
+            ['value' => 'bestsell_products', 'label' => __('Best-sell Products')],
+            ['value' => 'sell_products', 'label' => __('Sale Products')],
+            ['value' => 'recently_viewed', 'label' => __('Recently Viewed')],
+//            ['value' => 'related_products', 'label' => __('Related Products')],
+//            ['value' => 'upsell_products', 'label' => __('Up-sell Products')],
+//            ['value' => 'crosssell_products', 'label' => __('Cross-sell Products')]
+        ];
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner.php b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner.php
new file mode 100644
index 000000000..500ca6d75
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Model\ResourceModel;
+
+/**
+ * Banner Resource Model
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Banner extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
+{
+    /**
+     * construct
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_init('weltpixel_owlcarouselslider_banners', 'id');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner/Collection.php b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner/Collection.php
new file mode 100644
index 000000000..109e99d14
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Banner/Collection.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner;
+
+/**
+ * Banner Collection
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
+{
+    /**
+     * _construct
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_init('WeltPixel\OwlCarouselSlider\Model\Banner',
+            'WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider.php b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider.php
new file mode 100644
index 000000000..cd58ed1bc
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Model\ResourceModel;
+
+/**
+ * Slider Resource Model
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Slider extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
+{
+    /**
+     * construct
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_init('weltpixel_owlcarouselslider_sliders', 'id');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider/Collection.php b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider/Collection.php
new file mode 100644
index 000000000..95031635b
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/ResourceModel/Slider/Collection.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider;
+
+/**
+ * Slider Collection
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
+{
+    /**
+     * _contruct
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_init('WeltPixel\OwlCarouselSlider\Model\Slider',
+            'WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider');
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Slider.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Slider.php
new file mode 100644
index 000000000..1bb26ed33
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Slider.php
@@ -0,0 +1,69 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Model;
+
+/**
+ * Slider Model
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Slider extends \Magento\Framework\Model\AbstractModel
+{
+    const SLIDER_TYPE_CONFIGURABLE  = 1;
+    const SLIDER_TYPE_CUSTOM        = 2;
+
+    const XML_CONFIG_ENABLE_BANNER = 'weltpixel_owl_carouselslider_general/general/enable_owlcarousel';
+
+    /**
+     * banner collection factory.
+     *
+     * @var \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory
+     */
+    protected $_bannerCollectionFactory;
+
+    /**
+     * constructor.
+     *
+     * @param \Magento\Framework\Model\Context                                          $context
+     * @param \Magento\Framework\Registry                                               $registry
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory $bannerCollectionFactory
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider                   $resource
+     * @param \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\Collection        $resourceCollection
+     */
+    public function __construct(
+        \Magento\Framework\Model\Context $context,
+        \Magento\Framework\Registry $registry,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\CollectionFactory $bannerCollectionFactory,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider $resource,
+        \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Slider\Collection $resourceCollection
+    ) {
+        parent::__construct($context, $registry, $resource, $resourceCollection);
+
+        $this->_bannerCollectionFactory = $bannerCollectionFactory;
+    }
+
+    /**
+     * Retrieve available slider type.
+     *
+     * @return []
+     */
+    public static function getAvailableTransition()
+    {
+        return [
+            'slide'   => __('Slide'),
+            'fadeOut' => __('Fade'),
+        ];
+    }
+
+    /**
+     * Retrieve banner collection of slider.
+     *
+     * @return \WeltPixel\OwlCarouselSlider\Model\ResourceModel\Banner\Collection
+     */
+    public function getSliderBanerCollection()
+    {
+        return $this->_bannerCollectionFactory->create()->addFieldToFilter('slider_id', $this->getId());
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Model/Status.php b/app/code/WeltPixel/OwlCarouselSlider/Model/Status.php
new file mode 100644
index 000000000..ee6b81a44
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Model/Status.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Model;
+
+/**
+ * Status
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class Status
+{
+    const STATUS_ENABLED  = 1;
+    const STATUS_DISABLED = 0;
+
+    /**
+     * Retrieve available statuses.
+     *
+     * @return []
+     */
+    public function getAllAvailableStatuses()
+    {
+        return [
+            self::STATUS_ENABLED  => __('Enabled'),
+            self::STATUS_DISABLED => __('Disabled'),
+        ];
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/README.md b/app/code/WeltPixel/OwlCarouselSlider/README.md
new file mode 100644
index 000000000..50bbdac8d
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/README.md
@@ -0,0 +1,25 @@
+# m2-weltpixel-owl-carousel-slider
+
+### Installation
+
+Dependencies:
+ - m2-weltpixel-backend
+
+With composer:
+
+```sh
+$ composer config repositories.welpixel-m2-weltpixel-owl-carousel-slider git git@github.com:rusdragos/m2-weltpixel-owl-carousel-slider.git
+$ composer require weltpixel/m2-weltpixel-owl-carousel-slider:dev-master
+```
+
+Manually:
+
+Copy the zip into app/code/WeltPixel/OwlCarouselSlider directory
+
+
+#### After installation by either means, enable the extension by running following commands:
+
+```sh
+$ php bin/magento module:enable WeltPixel_OwlCarouselSlider --clear-static-content
+$ php bin/magento setup:upgrade
+```
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Setup/InstallSchema.php b/app/code/WeltPixel/OwlCarouselSlider/Setup/InstallSchema.php
new file mode 100644
index 000000000..bcf9d63d5
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Setup/InstallSchema.php
@@ -0,0 +1,357 @@
+<?php
+
+namespace WeltPixel\OwlCarouselSlider\Setup;
+
+use Magento\Framework\Setup\InstallSchemaInterface;
+use Magento\Framework\Setup\ModuleContextInterface;
+use Magento\Framework\Setup\SchemaSetupInterface;
+
+/**
+ * Install schema
+ * @category WeltPixel
+ * @package  WeltPixel_OwlCarouselSlider
+ * @module   OwlCarouselSlider
+ * @author   WeltPixel Developer
+ */
+class InstallSchema implements InstallSchemaInterface
+{
+    /**
+     * Installs DB schema for module
+     *
+     * @param SchemaSetupInterface   $setup
+     * @param ModuleContextInterface $context
+     * @return void
+     */
+    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
+    {
+        $installer = $setup;
+
+        $installer->startSetup();
+
+        // Get weltpixel_owlcarouselslider_banners table
+        $tableName = $installer->getTable('weltpixel_owlcarouselslider_banners');
+
+        // Check if the table already exists
+        if ($installer->getConnection()->isTableExists($tableName) != true) {
+
+            /*
+             * Create table weltpixel_owlcarouselslider_banners
+             */
+
+            $table = $installer->getConnection()->newTable(
+                $tableName
+            )->addColumn(
+                'id',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
+                'Banner Id'
+            )->addColumn(
+                'status',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => false, 'default' => '0'],
+                'Banner Status'
+            )->addColumn(
+                'title',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                255,
+                ['nullable' => false, 'default' => ''],
+                'Banner Title'
+            )->addColumn(
+                'show_title',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '0'],
+                'Show Banner Title'
+            )->addColumn(
+                'description',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                '64k',
+                ['nullable' => true, 'default' => ''],
+                'Banner Description'
+            )->addColumn(
+                'show_description',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '0'],
+                'Show Banner Description'
+            )->addColumn(
+                'banner_type',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '0'],
+                'Banner Type'
+            )->addColumn(
+                'slider_id',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true],
+                'Slider Id'
+            )->addColumn(
+                'url',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                255,
+                ['nullable' => true, 'default' => ''],
+                'Banner Url'
+            )->addColumn(
+                'target',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                50,
+                ['nullable' => true, 'default' => '_blank'],
+                'Banner Url Target'
+            )->addColumn(
+                'video',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                '64k',
+                ['nullable' => true, 'default' => ''],
+                'Banner Video'
+            )->addColumn(
+                'image',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                255,
+                ['nullable' => true],
+                'Banner Image'
+            )->addColumn(
+                'custom',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                '64k',
+                ['nullable' => true, 'default' => ''],
+                'Banner Custom HTML'
+            )->addColumn(
+                'alt_text',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                255,
+                ['nullable' => true],
+                'Banner Image Alt Text'
+            )->addColumn(
+                'button_text',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                255,
+                ['nullable' => true],
+                'Button Text'
+            )->addColumn(
+                'custom_content',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                '64k',
+                ['nullable' => true],
+                'Custom Content'
+            )->addColumn(
+                'valid_from',
+                \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME,
+                null,
+                ['nullable' => true],
+                'Banner Valid From'
+            )->addColumn(
+                'valid_to',
+                \Magento\Framework\DB\Ddl\Table::TYPE_DATETIME,
+                null,
+                ['nullable' => true],
+                'Banner Valid To'
+            )->addColumn(
+                'sort_order',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true],
+                'Banner Sort Ordert'
+            )->addIndex(
+                $installer->getIdxName('weltpixel_owlcarouselslider_banners', ['id']),
+                ['id']
+            )->addIndex(
+                $installer->getIdxName('weltpixel_owlcarouselslider_banners', ['status']),
+                ['status']
+            )->addIndex(
+                $installer->getIdxName('weltpixel_owlcarouselslider_banners', ['slider_id']),
+                ['slider_id']
+            )->addIndex(
+                $installer->getIdxName('weltpixel_owlcarouselslider_banners', ['valid_from']),
+                ['valid_from']
+            )->addIndex(
+                $installer->getIdxName('weltpixel_owlcarouselslider_banners', ['valid_to']),
+                ['valid_to']
+            );
+
+            $installer->getConnection()->createTable($table);
+        }
+
+        /*
+         * Create table weltpixel_owlcarouselslider_sliders
+         */
+
+        // Get weltpixel_owlcarouselslider_sliders table
+        $tableName = $installer->getTable('weltpixel_owlcarouselslider_sliders');
+
+        // Check if the table already exists
+        if ($installer->getConnection()->isTableExists($tableName) != true) {
+            $table = $installer->getConnection()->newTable(
+                $tableName
+            )->addColumn(
+                'id',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['identity' => true, 'unsigned' => true, 'nullable' => false, 'primary' => true],
+                'ID'
+            )->addColumn(
+                'status',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '0'],
+                'Slider Status'
+            )->addColumn(
+                'title',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                255,
+                ['nullable' => false, 'default' => 'Custom Slider'],
+                'Slider Title'
+            )->addColumn(
+                'show_title',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '0'],
+                'Show Title'
+            )->addColumn(
+                'slider_content',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                '64k',
+                ['nullable' => true, 'default' => ''],
+                'Slider Content'
+            )->addColumn(
+                'nav',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Navigation'
+            )->addColumn(
+                'dots',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Dots'
+            )->addColumn(
+                'center',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Center'
+            )->addColumn(
+                'items',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Items'
+            )->addColumn(
+                'loop',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Loop'
+            )->addColumn(
+                'margin',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '0'],
+                'Margin'
+            )->addColumn(
+                'stagePadding',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '0'],
+                'StagePadding'
+            )->addColumn(
+                'lazyLoad',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'LazyLoad'
+            )->addColumn(
+                'transition',
+                \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                255,
+                ['nullable' => true, 'default' => 'fadeOut'],
+                'Transition'
+            )->addColumn(
+                'autoplay',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Autoplay'
+            )->addColumn(
+                'autoplayTimeout',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '3000'],
+                'AutoplayTimeout'
+            )->addColumn(
+                'autoplayHoverPause',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'AutoplayHoverPause'
+            )->addColumn(
+                'autoHeight',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'AutoHeight'
+            )->addColumn(
+                'nav_brk1',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 1 Nav'
+            )->addColumn(
+                'items_brk1',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 1 Items'
+            )->addColumn(
+                'nav_brk2',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 2 Nav'
+            )->addColumn(
+                'items_brk2',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 2 Items'
+            )->addColumn(
+                'nav_brk3',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 3 Nav'
+            )->addColumn(
+                'items_brk3',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 3 Items'
+            )->addColumn(
+                'nav_brk4',
+                \Magento\Framework\DB\Ddl\Table::TYPE_SMALLINT,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 4 Nav'
+            )->addColumn(
+                'items_brk4',
+                \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
+                null,
+                ['nullable' => true, 'default' => '1'],
+                'Breakpoint 4 Items'
+            )->addIndex(
+                $installer->getIdxName('weltpixel_owlcarouselslider_sliders', ['id']),
+                ['status']
+            )->addIndex(
+                $installer->getIdxName('weltpixel_owlcarouselslider_sliders', ['status']),
+                ['status']
+            );
+
+            $installer->getConnection()->createTable($table);
+        }
+        
+        $installer->endSetup();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/Setup/UpgradeSchema.php b/app/code/WeltPixel/OwlCarouselSlider/Setup/UpgradeSchema.php
new file mode 100644
index 000000000..89eac5fb2
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/Setup/UpgradeSchema.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace WeltPixel\OwlCarouselSlider\Setup;
+
+use Magento\Framework\Setup\UpgradeSchemaInterface;
+use Magento\Framework\Setup\ModuleContextInterface;
+use Magento\Framework\Setup\SchemaSetupInterface;
+
+/**
+ * Upgrade the OwlCarouselSlider module DB scheme
+ * Add new column to weltpixel_owlcarouselslider_banners table
+ */
+class UpgradeSchema implements UpgradeSchemaInterface
+{
+    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
+    {
+        $setup->startSetup();
+    
+        if (version_compare($context->getVersion(), '1.0.4') < 0) {
+            $setup->getConnection()->addColumn(
+                $setup->getTable('weltpixel_owlcarouselslider_banners'),
+                'custom_css',
+                [
+                    'type'     => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'length'   => '64k',
+                    'nullable' => true,
+                    'after'    => 'custom_content',
+                    'comment'  => 'Custom CSS'
+                ]
+            );
+        }
+        if (version_compare($context->getVersion(), '1.0.5') < 0) {
+            $setup->getConnection()->addColumn(
+                $setup->getTable('weltpixel_owlcarouselslider_banners'),
+                'ga_promo_id',
+                [
+                    'type'     => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'length'   => '256',
+                    'nullable' => false,
+                    'default' => '',
+                    'comment'  => 'GA Promo ID'
+                ]
+            );
+
+            $setup->getConnection()->addColumn(
+                $setup->getTable('weltpixel_owlcarouselslider_banners'),
+                'ga_promo_name',
+                [
+                    'type'     => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'length'   => '256',
+                    'nullable' => false,
+                    'default' => '',
+                    'comment'  => 'GA Promo Name'
+                ]
+            );
+
+            $setup->getConnection()->addColumn(
+                $setup->getTable('weltpixel_owlcarouselslider_banners'),
+                'ga_promo_creative',
+                [
+                    'type'     => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'length'   => '256',
+                    'nullable' => false,
+                    'default' => '',
+                    'comment'  => 'GA Promo Creative'
+                ]
+            );
+
+            $setup->getConnection()->addColumn(
+                $setup->getTable('weltpixel_owlcarouselslider_banners'),
+                'ga_promo_position',
+                [
+                    'type'     => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
+                    'length'   => '256',
+                    'nullable' => false,
+                    'default' => '',
+                    'comment'  => 'GA Promo Position'
+                ]
+            );
+        }
+
+
+        $setup->endSetup();
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/composer.json b/app/code/WeltPixel/OwlCarouselSlider/composer.json
new file mode 100644
index 000000000..0f253a950
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/composer.json
@@ -0,0 +1,29 @@
+{
+    "name": "weltpixel/m2-weltpixel-owl-carousel-slider",
+    "description": "WeltPixel Owl Carousel And Slider Module",
+    "require": {
+        "php": "~5.6.5|7.0.2|7.0.4|~7.0.6|~7.1.0",
+        "weltpixel/m2-weltpixel-backend": "~1.0 | master"
+    },
+    "type": "magento2-module",
+    "version": "1.5.7",
+    "license": [
+        "OSL-3.0",
+        "AFL-3.0"
+    ],
+    "authors": [
+        {
+            "name": "WeltPixel",
+            "email": "support@weltpixel.com",
+            "homepage": "http://www.weltpixel.com/"
+        }
+    ],
+    "autoload": {
+        "files": [
+            "registration.php"
+        ],
+        "psr-4": {
+            "WeltPixel\\OwlCarouselSlider\\": ""
+        }
+    }
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/acl.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/acl.xml
new file mode 100644
index 000000000..70bf8962f
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/acl.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
+    <acl>
+        <resources>
+            <resource id="Magento_Backend::admin">
+                <resource id="WeltPixel_Backend::WeltPixel">
+                    <resource id="WeltPixel_OwlCarouselSlider::owlcarouselslider" title="WeltPixel OwlCarouselSlider" sortOrder="10">
+                        <resource id="WeltPixel_OwlCarouselSlider::owlcarouselslider_general_configuration_carousel" title="Manage General Settings" sortOrder="0" />
+                        <resource id="WeltPixel_OwlCarouselSlider::owlcarouselslider_products_sliders" title="Manage Products Sliders" sortOrder="10" />
+                    </resource>
+                    <resource id="WeltPixel_OwlCarouselSlider::owlsliders" title="WeltPixel OwlCarouselSlider" sortOrder="10">
+                        <resource id="WeltPixel_OwlCarouselSlider::owlcarouselslider_general_configuration_slider" title="Manage General Settings" sortOrder="0" />
+                        <resource id="WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_sliders" title="Manage Sliders" sortOrder="10" />
+                        <resource id="WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_banners" title="Manage Banners for Sliders" sortOrder="10" />
+                    </resource>
+                </resource>
+                <resource id="Magento_Backend::stores">
+                    <resource id="Magento_Backend::stores_settings">
+                        <resource id="Magento_Config::config">
+                            <resource id="WeltPixel_OwlCarouselSlider::owlcarouselslider_settings" title="OwlCarouselSlider Products Sliders And Settings" />
+                        </resource>
+                    </resource>
+                </resource>
+            </resource>
+        </resources>
+    </acl>
+</config>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/menu.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/menu.xml
new file mode 100644
index 000000000..305eade9c
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/menu.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
+    <menu>
+        <add
+                id="WeltPixel_OwlCarouselSlider::owlcarouselslider"
+                title="Carousels"
+                module="WeltPixel_OwlCarouselSlider"
+                sortOrder="130"
+                parent="WeltPixel_Backend::WeltPixel"
+                resource="WeltPixel_OwlCarouselSlider::owlcarouselslider"
+        />
+        <add
+                id="WeltPixel_OwlCarouselSlider::owlcarouselslider_general_configuration_carousel"
+                title="General Settings"
+                module="WeltPixel_OwlCarouselSlider"
+                action="adminhtml/system_config/edit/section/weltpixel_owl_slider_config/"
+                sortOrder="5"
+                parent="WeltPixel_OwlCarouselSlider::owlcarouselslider"
+                resource="WeltPixel_OwlCarouselSlider::owlcarouselslider_general_configuration_carousel"
+        />
+        <add
+                id="WeltPixel_OwlCarouselSlider::owlcarouselslider_products_sliders"
+                title="OWL Product Carousels"
+                module="WeltPixel_OwlCarouselSlider"
+                action="adminhtml/system_config/edit/section/weltpixel_owl_carousel_config/"
+                sortOrder="10"
+                parent="WeltPixel_OwlCarouselSlider::owlcarouselslider"
+                resource="WeltPixel_OwlCarouselSlider::owlcarouselslider_products_sliders"
+        />
+        <add
+                id="WeltPixel_OwlCarouselSlider::owlsliders"
+                title="Sliders"
+                module="WeltPixel_OwlCarouselSlider"
+                sortOrder="140"
+                parent="WeltPixel_Backend::WeltPixel"
+                resource="WeltPixel_OwlCarouselSlider::owlcarouselslider"
+        />
+        <add
+                id="WeltPixel_OwlCarouselSlider::owlcarouselslider_general_configuration_slider"
+                title="General Settings"
+                module="WeltPixel_OwlCarouselSlider"
+                action="adminhtml/system_config/edit/section/weltpixel_owl_slider_config/"
+                sortOrder="5"
+                parent="WeltPixel_OwlCarouselSlider::owlsliders"
+                resource="WeltPixel_OwlCarouselSlider::owlcarouselslider_general_configuration_slider"
+        />
+        <add
+                id="WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_banners"
+                title="Banners for Sliders"
+                module="WeltPixel_OwlCarouselSlider"
+                action="weltowlcarousel/banner"
+                sortOrder="10"
+                parent="WeltPixel_OwlCarouselSlider::owlsliders"
+                resource="WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_banners"
+        />
+        <add
+                id="WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_sliders"
+                title="Sliders Manager"
+                module="WeltPixel_OwlCarouselSlider"
+                action="weltowlcarousel/slider"
+                sortOrder="20"
+                parent="WeltPixel_OwlCarouselSlider::owlsliders"
+                resource="WeltPixel_OwlCarouselSlider::owlcarouselslider_custom_sliders"
+        />
+    </menu>
+</config>
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/routes.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/routes.xml
new file mode 100644
index 000000000..db872ebd4
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/routes.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
+    <router id="admin">
+        <route id="weltowlcarousel" frontName="weltowlcarousel">
+            <module name="WeltPixel_OwlCarouselSlider" />
+        </route>
+    </router>
+</config>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/system.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/system.xml
new file mode 100644
index 000000000..dbfe0fcd8
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/adminhtml/system.xml
@@ -0,0 +1,1673 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
+    <system>
+        <section id="weltpixel_owl_carousel_config" translate="label" type="text" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+            <label>OWL Product Carousels</label>
+            <tab>weltpixel</tab>
+            <resource>WeltPixel_OwlCarouselSlider::owlcarouselslider_settings</resource>
+            <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>General Configuration for OWL Product Carousels and Banner Sliders</label>
+                <field id="breakpoint_1" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Breakpoint 1</label>
+                    <comment>Add breakpoint. Ex.: 320. Applied to resolutions higher than set value.</comment>
+                </field>
+                <field id="breakpoint_2" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Breakpoint 2</label>
+                    <comment>Add breakpoint. Ex.: 768. Applied to resolutions higher than set value.</comment>
+                </field>
+                <field id="breakpoint_3" translate="label" type="text" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Breakpoint 3</label>
+                    <comment>Add breakpoint. Ex.: 1024. Applied to resolutions higher than set value.</comment>
+                </field>
+                <field id="breakpoint_4" translate="label" type="text" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Breakpoint 4</label>
+                    <comment>Add breakpoint. Ex.: 1280. Applied to resolutions higher than set value.</comment>
+                </field>
+                <field id="display_wishlist" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Display wishlist</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="display_compare" translate="label" type="select" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Display compare</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+            </group>
+
+            <!--New Products Section-->
+
+            <group id="new_products" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>New Products Carousel Settings</label>
+
+                <field id="status" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Enable Carousel</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment>In order for carousel to be displayed, make sure you have products defined as "New" and the carousel is inserted in your page/block. Insert the
+                        carousel by following the documentation.</comment>
+                </field>
+                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Title</label>
+                    <comment>Visible only if not empty.</comment>
+                </field>
+                <field id="show_price" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Price</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_addto" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Add To Cart</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_wishlist" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Wishlist</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_compare" translate="label" type="select" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Compare</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="random_sort" translate="label" type="select" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Random Sort</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="max_items" translate="label" type="text" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Max Items</label>
+                    <comment>The number of items you want to load.</comment>
+                </field>
+
+                <!--Separator Slider-->
+
+                <field id="separatorSlider" translate="label" type="text" sortOrder="85" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorslide</frontend_model>
+                </field>
+                <field id="nav" translate="label" type="select" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="dots" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots navigation are displayed.</comment>
+                </field>
+                <field id="center" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Center</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding" translate="label" type="text" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours). Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options .</comment>
+                </field>
+                <field id="items" translate="label" type="text" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="loop" translate="label" type="select" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Loop</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Inifnity loop. Duplicate last and first items to get loop illusion.</comment>
+                </field>
+                <field id="margin" translate="label" type="text" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Margin</label>
+                    <comment>Set right margin for each item in carousel. Example: for a margin of 30px enter 30 in the field.</comment>
+                </field>
+                <field id="lazyLoad" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>LazyLoad</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.</comment>
+                </field>
+                <field id="autoplay" translate="label" type="select" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Autoplay</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                </field>
+                <field id="autoplayTimeout" translate="label" type="text" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayTimeout</label>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Autoplay interval timeout.</comment>
+                </field>
+                <field id="autoplayHoverPause" translate="label" type="select" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayHoverPause</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Pause on mouse hover.</comment>
+                </field>
+
+                <!--Separator Breakpoints-->
+
+                <field id="Separatorbreakpoint" translate="label" type="text" sortOrder="195" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <!--Separator Breakpoint 1-->
+                <field id="s_1" translate="label" type="text" sortOrder="197" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk1" translate="label" type="select" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk1" translate="label" type="select" sortOrder="205" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk1" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk1" translate="label" type="select" sortOrder="220" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk1" translate="label" type="text" sortOrder="230" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk1">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 2-->
+                <field id="s_2" translate="label" type="text" sortOrder="235" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk2" translate="label" type="select" sortOrder="240" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk2" translate="label" type="select" sortOrder="245" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk2" translate="label" type="text" sortOrder="250" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk2" translate="label" type="select" sortOrder="260" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk2" translate="label" type="text" sortOrder="270" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk2">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_3" translate="label" type="text" sortOrder="275" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk3" translate="label" type="select" sortOrder="280" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk3" translate="label" type="select" sortOrder="285" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk3" translate="label" type="text" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk3" translate="label" type="select" sortOrder="300" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk3" translate="label" type="text" sortOrder="310" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk3">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_4" translate="label" type="text" sortOrder="315" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk4" translate="label" type="select" sortOrder="320" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk4" translate="label" type="select" sortOrder="325" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk4" translate="label" type="text" sortOrder="330" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk4" translate="label" type="select" sortOrder="340" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk4" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk4">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+            </group>
+
+            <!--Best sell Products Section-->
+
+            <group id="bestsell_products" translate="label" type="text" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Best Sell Products Carousel Settings</label>
+
+                <field id="status" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Enable Carousel</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment>In order for carousel to be displayed make sure the carousel is inserted in your page/block and there are a few orders placed. Insert the carousel by following the documentation.</comment>
+                </field>
+                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Title</label>
+                    <comment>Visible only if not empty.</comment>
+                </field>
+                <field id="show_price" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Price</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_addto" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Add To Cart</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_wishlist" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Wishlist</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_compare" translate="label" type="select" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Compare</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="random_sort" translate="label" type="select" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Random Sort</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="max_items" translate="label" type="text" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Max Items</label>
+                    <comment>The number of items you want to load.</comment>
+                </field>
+
+                <!--Separator Slider-->
+
+                <field id="separatorSlider" translate="label" type="text" sortOrder="85" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorslide</frontend_model>
+                </field>
+                <field id="nav" translate="label" type="select" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="dots" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots navigation are displayed.</comment>
+                </field>
+                <field id="center" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Center</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding" translate="label" type="text" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours). Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options .</comment>
+                </field>
+                <field id="items" translate="label" type="text" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="loop" translate="label" type="select" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Loop</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Inifnity loop. Duplicate last and first items to get loop illusion.</comment>
+                </field>
+                <field id="margin" translate="label" type="text" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Margin</label>
+                    <comment>Set right margin for each item in carousel. Example: for a margin of 30px enter 30 in the field.</comment>
+                </field>
+                <field id="lazyLoad" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>LazyLoad</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.</comment>
+                </field>
+                <field id="autoplay" translate="label" type="select" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Autoplay</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                </field>
+                <field id="autoplayTimeout" translate="label" type="text" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayTimeout</label>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Autoplay interval timeout.</comment>
+                </field>
+                <field id="autoplayHoverPause" translate="label" type="select" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayHoverPause</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Pause on mouse hover.</comment>
+                </field>
+
+                <!--Separator Breakpoints-->
+
+                <field id="Separatorbreakpoint" translate="label" type="text" sortOrder="195" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <!--Separator Breakpoint 1-->
+                <field id="s_1" translate="label" type="text" sortOrder="197" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk1" translate="label" type="select" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk1" translate="label" type="select" sortOrder="205" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk1" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk1" translate="label" type="select" sortOrder="220" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding_brk1" translate="label" type="text" sortOrder="230" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk1">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 2-->
+                <field id="s_2" translate="label" type="text" sortOrder="235" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk2" translate="label" type="select" sortOrder="240" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk2" translate="label" type="select" sortOrder="245" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk2" translate="label" type="text" sortOrder="250" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk2" translate="label" type="select" sortOrder="260" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding_brk2" translate="label" type="text" sortOrder="270" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk2">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_3" translate="label" type="text" sortOrder="275" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk3" translate="label" type="select" sortOrder="280" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk3" translate="label" type="select" sortOrder="285" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk3" translate="label" type="text" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk3" translate="label" type="select" sortOrder="300" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding_brk3" translate="label" type="text" sortOrder="310" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk3">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_4" translate="label" type="text" sortOrder="315" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk4" translate="label" type="select" sortOrder="320" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk4" translate="label" type="select" sortOrder="325" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk4" translate="label" type="text" sortOrder="330" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk4" translate="label" type="select" sortOrder="340" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding_brk4" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk4">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+            </group>
+
+            <!--Sell Products Section-->
+
+            <group id="sell_products" translate="label" type="text" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Sale Products Carousel Settings</label>
+
+                <field id="status" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Enable Carousel</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment>In order for carousel to be displayed, make sure you have products defined as "Sale" and the carousel is inserted in your page/block. Insert the carousel by
+                        following the documentation.</comment>
+                </field>
+                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Title</label>
+                    <comment>Visible only if not empty.</comment>
+                </field>
+                <field id="show_price" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Price</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_addto" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Add To Cart</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_wishlist" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Wishlist</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_compare" translate="label" type="select" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Compare</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="random_sort" translate="label" type="select" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Random Sort</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="max_items" translate="label" type="text" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Max Items</label>
+                    <comment>The number of items you want to load.</comment>
+                </field>
+
+                <!--Separator Slider-->
+
+                <field id="separatorSlider" translate="label" type="text" sortOrder="85" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorslide</frontend_model>
+                </field>
+                <field id="nav" translate="label" type="select" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="dots" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots navigation are displayed.</comment>
+                </field>
+                <field id="center" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Center</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding" translate="label" type="text" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours). Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options .</comment>
+                </field>
+                <field id="items" translate="label" type="text" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="loop" translate="label" type="select" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Loop</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Inifnity loop. Duplicate last and first items to get loop illusion.</comment>
+                </field>
+                <field id="margin" translate="label" type="text" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Margin</label>
+                    <comment>Set right margin for each item in carousel. Example: for a margin of 30px enter 30 in the field.</comment>
+                </field>
+                <field id="lazyLoad" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>LazyLoad</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.</comment>
+                </field>
+                <field id="autoplay" translate="label" type="select" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Autoplay</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                </field>
+                <field id="autoplayTimeout" translate="label" type="text" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayTimeout</label>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Autoplay interval timeout.</comment>
+                </field>
+                <field id="autoplayHoverPause" translate="label" type="select" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayHoverPause</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Pause on mouse hover.</comment>
+                </field>
+
+                <!--Separator Breakpoints-->
+
+                <field id="Separatorbreakpoint" translate="label" type="text" sortOrder="195" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <!--Separator Breakpoint 1-->
+                <field id="s_1" translate="label" type="text" sortOrder="197" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk1" translate="label" type="select" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk1" translate="label" type="select" sortOrder="205" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk1" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk1" translate="label" type="select" sortOrder="220" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk1" translate="label" type="text" sortOrder="230" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk1">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 2-->
+                <field id="s_2" translate="label" type="text" sortOrder="235" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk2" translate="label" type="select" sortOrder="240" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk2" translate="label" type="select" sortOrder="245" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk2" translate="label" type="text" sortOrder="250" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk2" translate="label" type="select" sortOrder="260" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk2" translate="label" type="text" sortOrder="270" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk2">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_3" translate="label" type="text" sortOrder="275" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk3" translate="label" type="select" sortOrder="280" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk3" translate="label" type="select" sortOrder="285" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk3" translate="label" type="text" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk3" translate="label" type="select" sortOrder="300" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk3" translate="label" type="text" sortOrder="310" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk3">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_4" translate="label" type="text" sortOrder="315" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk4" translate="label" type="select" sortOrder="320" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk4" translate="label" type="select" sortOrder="325" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk4" translate="label" type="text" sortOrder="330" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk4" translate="label" type="select" sortOrder="340" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk4" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk4">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+            </group>
+
+            <!--Recently Products Section-->
+
+            <group id="recently_viewed" translate="label" type="text" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Recently Viewed Products Carousel Settings</label>
+
+                <field id="status" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Enable Carousel</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment>In order for carousel to be displayed, users must be logged in and visited at least one product and the carousel is inserted in your page/block. Insert the carousel by following the documentation.</comment>
+                </field>
+                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Title</label>
+                    <comment>Visible only if not empty.</comment>
+                </field>
+                <field id="show_price" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Price</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_addto" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Add To Cart</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_wishlist" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Wishlist</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="show_compare" translate="label" type="select" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Show Compare</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="random_sort" translate="label" type="select" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Random Sort</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                </field>
+                <field id="max_items" translate="label" type="text" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Max Items</label>
+                    <comment>The number of items you want to load.</comment>
+                </field>
+
+                <!--Separator Slider-->
+
+                <field id="separatorSlider" translate="label" type="text" sortOrder="85" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorslide</frontend_model>
+                </field>
+                <field id="nav" translate="label" type="select" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="dots" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots navigation are displayed.</comment>
+                </field>
+                <field id="center" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Center</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding" translate="label" type="text" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours). Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options .</comment>
+                </field>
+                <field id="items" translate="label" type="text" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="loop" translate="label" type="select" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Loop</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Inifnity loop. Duplicate last and first items to get loop illusion.</comment>
+                </field>
+                <field id="margin" translate="label" type="text" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Margin</label>
+                    <comment>Set right margin for each item in carousel. Example: for a margin of 30px enter 30 in the field.</comment>
+                </field>
+                <field id="lazyLoad" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>LazyLoad</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.</comment>
+                </field>
+                <field id="autoplay" translate="label" type="select" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Autoplay</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                </field>
+                <field id="autoplayTimeout" translate="label" type="text" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayTimeout</label>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Autoplay interval timeout.</comment>
+                </field>
+                <field id="autoplayHoverPause" translate="label" type="select" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayHoverPause</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Pause on mouse hover.</comment>
+                </field>
+
+                <!--Separator Breakpoints-->
+
+                <field id="Separatorbreakpoint" translate="label" type="text" sortOrder="195" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <!--Separator Breakpoint 1-->
+                <field id="s_1" translate="label" type="text" sortOrder="197" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk1" translate="label" type="select" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk1" translate="label" type="select" sortOrder="205" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk1" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk1" translate="label" type="select" sortOrder="220" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk1" translate="label" type="text" sortOrder="230" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk1">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 2-->
+                <field id="s_2" translate="label" type="text" sortOrder="235" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk2" translate="label" type="select" sortOrder="240" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk2" translate="label" type="select" sortOrder="245" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk2" translate="label" type="text" sortOrder="250" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk2" translate="label" type="select" sortOrder="260" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk2" translate="label" type="text" sortOrder="270" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk2">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_3" translate="label" type="text" sortOrder="275" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk3" translate="label" type="select" sortOrder="280" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk3" translate="label" type="select" sortOrder="285" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk3" translate="label" type="text" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk3" translate="label" type="select" sortOrder="300" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk3" translate="label" type="text" sortOrder="310" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk3">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 4-->
+                <field id="s_4" translate="label" type="text" sortOrder="315" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk4" translate="label" type="select" sortOrder="320" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk4" translate="label" type="select" sortOrder="325" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk4" translate="label" type="text" sortOrder="330" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk4" translate="label" type="select" sortOrder="340" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk4" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk4">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+            </group>
+
+            <!--Related Products Section-->
+
+            <group id="related_products" translate="label" type="text" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Related Products Carousel Settings</label>
+
+                <field id="status" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Enable Carousel</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment>If Enabled, the products will be displayed on product page in a carousel instead of default product grid. Make sure you have defined Related Products in your catalog.</comment>
+                </field>
+                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Title</label>
+                    <comment>Visible only if not empty.</comment>
+                </field>
+
+                <!--Separator Slider-->
+
+                <field id="separatorSlider" translate="label" type="text" sortOrder="25" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorslide</frontend_model>
+                </field>
+                <field id="nav" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="dots" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots navigation are displayed.</comment>
+                </field>
+                <field id="center" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Center</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding" translate="label" type="text" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours). Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options .</comment>
+                </field>
+                <field id="items" translate="label" type="text" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="loop" translate="label" type="select" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Loop</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Inifnity loop. Duplicate last and first items to get loop illusion.</comment>
+                </field>
+                <field id="margin" translate="label" type="text" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Margin</label>
+                    <comment>Set right margin for each item in carousel. Example: for a margin of 30px enter 30 in the field.</comment>
+                </field>
+                <field id="lazyLoad" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>LazyLoad</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.</comment>
+                </field>
+                <field id="autoplay" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Autoplay</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                </field>
+                <field id="autoplayTimeout" translate="label" type="text" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayTimeout</label>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Autoplay interval timeout.</comment>
+                </field>
+                <field id="autoplayHoverPause" translate="label" type="select" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayHoverPause</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Pause on mouse hover.</comment>
+                </field>
+
+                <!--Separator Breakpoints-->
+
+                <field id="Separatorbreakpoint" translate="label" type="text" sortOrder="135" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <!--Separator Breakpoint 1-->
+                <field id="s_1" translate="label" type="text" sortOrder="137" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk1" translate="label" type="select" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk1" translate="label" type="select" sortOrder="145" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk1" translate="label" type="text" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk1" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk1" translate="label" type="text" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk1">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 2-->
+                <field id="s_2" translate="label" type="text" sortOrder="175" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk2" translate="label" type="select" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk2" translate="label" type="select" sortOrder="185" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk2" translate="label" type="text" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk2" translate="label" type="select" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk2" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk2">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_3" translate="label" type="text" sortOrder="215" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk3" translate="label" type="select" sortOrder="220" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk3" translate="label" type="select" sortOrder="225" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk3" translate="label" type="text" sortOrder="230" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk3" translate="label" type="select" sortOrder="240" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk3" translate="label" type="text" sortOrder="250" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk3">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_4" translate="label" type="text" sortOrder="255" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk4" translate="label" type="select" sortOrder="260" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk4" translate="label" type="select" sortOrder="265" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk4" translate="label" type="text" sortOrder="270" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk4" translate="label" type="select" sortOrder="280" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk4" translate="label" type="text" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk4">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+            </group>
+
+            <!--Up-sells Products Section-->
+
+            <group id="upsell_products" translate="label" type="text" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Up-Sells Products Carousel Settings</label>
+
+                <field id="status" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Enable Carousel</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment>If Enabled, the products will be displayed on product page in a carousel instead of default product grid. Make sure you have defined Up-Sells Products in your catalog.</comment>
+                </field>
+                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Title</label>
+                    <comment>Visible only if not empty.</comment>
+                </field>
+
+                <!--Separator Slider-->
+
+                <field id="separatorSlider" translate="label" type="text" sortOrder="25" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorslide</frontend_model>
+                </field>
+                <field id="nav" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="dots" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots navigation are displayed.</comment>
+                </field>
+                <field id="center" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Center</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding" translate="label" type="text" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours). Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options .</comment>
+                </field>
+                <field id="items" translate="label" type="text" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="loop" translate="label" type="select" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Loop</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Inifnity loop. Duplicate last and first items to get loop illusion.</comment>
+                </field>
+                <field id="margin" translate="label" type="text" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Margin</label>
+                    <comment>Set right margin for each item in carousel. Example: for a margin of 30px enter 30 in the field.</comment>
+                </field>
+                <field id="lazyLoad" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>LazyLoad</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.</comment>
+                </field>
+                <field id="autoplay" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Autoplay</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                </field>
+                <field id="autoplayTimeout" translate="label" type="text" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayTimeout</label>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Autoplay interval timeout.</comment>
+                </field>
+                <field id="autoplayHoverPause" translate="label" type="select" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayHoverPause</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Pause on mouse hover.</comment>
+                </field>
+
+                <!--Separator Breakpoints-->
+
+                <field id="Separatorbreakpoint" translate="label" type="text" sortOrder="135" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <!--Separator Breakpoint 1-->
+                <field id="s_1" translate="label" type="text" sortOrder="137" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk1" translate="label" type="select" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk1" translate="label" type="select" sortOrder="145" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk1" translate="label" type="text" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk1" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk1" translate="label" type="text" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk1">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 2-->
+                <field id="s_2" translate="label" type="text" sortOrder="175" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk2" translate="label" type="select" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk2" translate="label" type="select" sortOrder="185" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk2" translate="label" type="text" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk2" translate="label" type="select" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk2" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk2">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_3" translate="label" type="text" sortOrder="215" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk3" translate="label" type="select" sortOrder="220" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk3" translate="label" type="select" sortOrder="225" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk3" translate="label" type="text" sortOrder="230" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk3" translate="label" type="select" sortOrder="240" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk3" translate="label" type="text" sortOrder="250" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk3">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_4" translate="label" type="text" sortOrder="255" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk4" translate="label" type="select" sortOrder="260" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk4" translate="label" type="select" sortOrder="265" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk4" translate="label" type="text" sortOrder="270" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk4" translate="label" type="select" sortOrder="280" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk4" translate="label" type="text" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk4">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+            </group>
+
+            <!--Cross-sell Products Section-->
+
+            <group id="crosssell_products" translate="label" type="text" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Cross-Sell Products Carousel Settings</label>
+
+                <field id="status" translate="label" type="select" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Enable Carousel</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment>If Enabled, the products will be displayed on product page in a carousel instead of default product grid. Make sure you have defined Cross-Sells Products in your catalog.</comment>
+                </field>
+                <field id="title" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Title</label>
+                    <comment>Visible only if not empty.</comment>
+                </field>
+
+                <!--Separator Slider-->
+
+                <field id="separatorSlider" translate="label" type="text" sortOrder="25" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorslide</frontend_model>
+                </field>
+                <field id="nav" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="dots" translate="label" type="select" sortOrder="40" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots navigation are displayed.</comment>
+                </field>
+                <field id="center" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Center</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="stagePadding" translate="label" type="text" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours). Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options .</comment>
+                </field>
+                <field id="items" translate="label" type="text" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. Carousel Breakpoint options overwrites this option. Please check below Breakpoint Carousel Options.</comment>
+                </field>
+                <field id="loop" translate="label" type="select" sortOrder="80" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Loop</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Inifnity loop. Duplicate last and first items to get loop illusion.</comment>
+                </field>
+                <field id="margin" translate="label" type="text" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Margin</label>
+                    <comment>Set right margin for each item in carousel. Example: for a margin of 30px enter 30 in the field.</comment>
+                </field>
+                <field id="lazyLoad" translate="label" type="select" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>LazyLoad</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>Lazy Load delays loading of images. Images outside of viewport are not loaded until user scrolls to them.</comment>
+                </field>
+                <field id="autoplay" translate="label" type="select" sortOrder="110" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Autoplay</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                </field>
+                <field id="autoplayTimeout" translate="label" type="text" sortOrder="120" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayTimeout</label>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Autoplay interval timeout.</comment>
+                </field>
+                <field id="autoplayHoverPause" translate="label" type="select" sortOrder="130" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>AutoplayHoverPause</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <depends>
+                        <field id="autoplay">1</field>
+                    </depends>
+                    <comment>Pause on mouse hover.</comment>
+                </field>
+
+                <!--Separator Breakpoints-->
+
+                <field id="Separatorbreakpoint" translate="label" type="text" sortOrder="135" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <!--Separator Breakpoint 1-->
+                <field id="s_1" translate="label" type="text" sortOrder="137" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk1" translate="label" type="select" sortOrder="140" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk1" translate="label" type="select" sortOrder="145" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk1" translate="label" type="text" sortOrder="150" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk1" translate="label" type="select" sortOrder="160" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk1" translate="label" type="text" sortOrder="170" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk1">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 2-->
+                <field id="s_2" translate="label" type="text" sortOrder="175" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk2" translate="label" type="select" sortOrder="180" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk2" translate="label" type="select" sortOrder="185" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk2" translate="label" type="text" sortOrder="190" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk2" translate="label" type="select" sortOrder="200" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk2" translate="label" type="text" sortOrder="210" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk2">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_3" translate="label" type="text" sortOrder="215" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk3" translate="label" type="select" sortOrder="220" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk3" translate="label" type="select" sortOrder="225" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk3" translate="label" type="text" sortOrder="230" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk3" translate="label" type="select" sortOrder="240" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk3" translate="label" type="text" sortOrder="250" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk3">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+
+                <!--Separatorbreakpoint 3-->
+                <field id="s_4" translate="label" type="text" sortOrder="255" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\Separatorbreakpoint</frontend_model>
+                </field>
+
+                <field id="nav_brk4" translate="label" type="select" sortOrder="260" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Next/Prev Buttons</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, next/prev buttons are displayed.</comment>
+                </field>
+                <field id="dots_brk4" translate="label" type="select" sortOrder="265" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Dots</label>
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <comment>If True, dots will displayed.</comment>
+                </field>
+                <field id="items_brk4" translate="label" type="text" sortOrder="270" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Items</label>
+                    <comment>The number of items you want to see on the screen. This value should be smaller than Max Items. </comment>
+                </field>
+                <field id="center_brk4" translate="label" type="select" sortOrder="280" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <source_model>WeltPixel\OwlCarouselSlider\Model\Config\Source\Truefalse</source_model>
+                    <label>Center</label>
+                    <comment>If True, carousel is centered on the screen. Works well even with an odd number of items.</comment>
+                </field>
+                <field id="stagePadding_brk4" translate="label" type="text" sortOrder="290" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>StagePadding</label>
+                    <depends>
+                        <field id="center_brk4">0</field>
+                    </depends>
+                    <comment>Padding left and right on stage (can see neighbours).</comment>
+                </field>
+            </group>
+            <group id="category_products" translate="label" type="text" sortOrder="90" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Custom Category Products Carousel Settings</label>
+                <field id="upgrade_to_pro" translate="comment" type="label" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1" >
+                    <comment><![CDATA[<b style="font-size: 16px"><a style="font-size: 16px" target="_blank" href="https://www.weltpixel.com/owl-carousel-and-slider.html">Upgrade to Pro version</a> to enable this functionality.</b>]]></comment>
+                </field>
+            </group>
+        </section>
+        <section id="weltpixel_owl_slider_config" translate="label" type="text" sortOrder="181" showInDefault="1" showInWebsite="1" showInStore="1">
+            <label>Owl Slider</label>
+            <tab>weltpixel</tab>
+            <resource>WeltPixel_OwlCarouselSlider::owlcarouselslider_settings</resource>
+            <group id="general" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>General Settings</label>
+                <field id="separatorGeneralSlider" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\SeparatorGeneralSlider</frontend_model>
+                </field>
+                <field id="enable_google_tracking" translate="label" type="select" sortOrder="50" showInDefault="1" showInWebsite="1" showInStore="1" >
+                    <label>Enable Google Analytics Tracking</label>
+                    <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
+                    <comment><![CDATA[<b>Hint:</b> Requires Installation of <a href="http://www.weltpixel.com/google-analytics-enhanced-ecommerce-tag-manager-magento-2.html" target="_blank" >Google Analytics Enhanced Ecommerce Free Extension</a>. This feature will allow you to track Banner Click-Through-Rate (CTR) and revenue generated by the banner. ]]></comment>
+                </field>
+                <field id="separatorGeneralCarousel" translate="label" type="text" sortOrder="55" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <frontend_model>WeltPixel\OwlCarouselSlider\Block\Adminhtml\System\Config\SeparatorGeneralCarousel</frontend_model>
+                </field>
+                <field id="enable_hover_image" translate="label" type="label" sortOrder="60" showInDefault="1" showInWebsite="1" showInStore="1" >
+                    <label>Enable Hover Image on products</label>
+                    <comment><![CDATA[ <b style="font-size: 16px"><a style="font-size: 16px" target="_blank" href="https://www.weltpixel.com/owl-carousel-and-slider.html">Upgrade to Pro version</a> to enable this functionality.</b> ]]></comment>
+                </field>
+                <field id="mobile_breakpoint" translate="label comment" type="label" sortOrder="70" showInDefault="1" showInWebsite="1" showInStore="1" >
+                    <label>Mobile Breakpoint</label>
+                    <comment><![CDATA[ <b style="font-size: 16px"><a style="font-size: 16px" target="_blank" href="https://www.weltpixel.com/owl-carousel-and-slider.html">Upgrade to Pro version</a> to enable this functionality.</b> ]]></comment>
+                </field>
+            </group>
+        </section>
+    </system>
+</config>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/config.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/config.xml
new file mode 100644
index 000000000..9ae73512a
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/config.xml
@@ -0,0 +1,285 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
+    <default>
+        <weltpixel_owl_carousel_config>
+            <general>
+                <breakpoint_1>0</breakpoint_1>
+                <breakpoint_2>768</breakpoint_2>
+                <breakpoint_3>1024</breakpoint_3>
+                <breakpoint_4>1280</breakpoint_4>
+            </general>
+            <new_products>
+                <status>1</status>
+                <title></title>
+                <show_price>1</show_price>
+                <show_addto>0</show_addto>
+                <show_wishlist>0</show_wishlist>
+                <show_compare>0</show_compare>
+                <random_sort>0</random_sort>
+                <max_items>15</max_items>
+                <nav>1</nav>
+                <dots>1</dots>
+                <center>0</center>
+                <items>5</items>
+                <loop>1</loop>
+                <margin>0</margin>
+                <stagePadding>0</stagePadding>
+                <lazyLoad>1</lazyLoad>
+                <autoplay>1</autoplay>
+                <autoplayTimeout>3000</autoplayTimeout>
+                <autoplayHoverPause>1</autoplayHoverPause>
+                <nav_brk1>0</nav_brk1>
+                <dots_brk1>1</dots_brk1>
+                <items_brk1>2</items_brk1>
+                <center_brk1>0</center_brk1>
+                <stagePadding_brk1>0</stagePadding_brk1>
+                <nav_brk2>0</nav_brk2>
+                <dots_brk2>1</dots_brk2>
+                <items_brk2>3</items_brk2>
+                <center_brk2>0</center_brk2>
+                <stagePadding_brk2>0</stagePadding_brk2>
+                <nav_brk3>0</nav_brk3>
+                <dots_brk3>1</dots_brk3>
+                <items_brk3>4</items_brk3>
+                <center_brk3>0</center_brk3>
+                <stagePadding_brk3>0</stagePadding_brk3>
+                <nav_brk4>1</nav_brk4>
+                <dots_brk4>1</dots_brk4>
+                <items_brk4>5</items_brk4>
+                <center_brk4>0</center_brk4>
+                <stagePadding_brk4>0</stagePadding_brk4>
+            </new_products>
+            <bestsell_products>
+                <status>1</status>
+                <title></title>
+                <show_price>1</show_price>
+                <show_addto>0</show_addto>
+                <show_wishlist>0</show_wishlist>
+                <show_compare>0</show_compare>
+                <random_sort>0</random_sort>
+                <max_items>15</max_items>
+                <nav>1</nav>
+                <dots>1</dots>
+                <center>0</center>
+                <items>5</items>
+                <loop>1</loop>
+                <margin>0</margin>
+                <stagePadding>0</stagePadding>
+                <lazyLoad>1</lazyLoad>
+                <autoplay>1</autoplay>
+                <autoplayTimeout>3000</autoplayTimeout>
+                <autoplayHoverPause>1</autoplayHoverPause>
+                <nav_brk1>0</nav_brk1>
+                <dots_brk1>1</dots_brk1>
+                <items_brk1>2</items_brk1>
+                <center_brk1>0</center_brk1>
+                <stagePadding_brk1>0</stagePadding_brk1>
+                <nav_brk2>0</nav_brk2>
+                <dots_brk2>1</dots_brk2>
+                <items_brk2>3</items_brk2>
+                <center_brk2>0</center_brk2>
+                <stagePadding_brk2>0</stagePadding_brk2>
+                <nav_brk3>0</nav_brk3>
+                <dots_brk3>1</dots_brk3>
+                <items_brk3>4</items_brk3>
+                <center_brk3>0</center_brk3>
+                <stagePadding_brk3>0</stagePadding_brk3>
+                <nav_brk4>1</nav_brk4>
+                <dots_brk4>1</dots_brk4>
+                <items_brk4>5</items_brk4>
+                <center_brk4>0</center_brk4>
+                <stagePadding_brk4>0</stagePadding_brk4>
+            </bestsell_products>
+            <sell_products>
+                <status>1</status>
+                <title></title>
+                <show_price>1</show_price>
+                <show_addto>0</show_addto>
+                <show_wishlist>0</show_wishlist>
+                <show_compare>0</show_compare>
+                <random_sort>0</random_sort>
+                <max_items>15</max_items>
+                <nav>1</nav>
+                <dots>1</dots>
+                <center>0</center>
+                <items>5</items>
+                <loop>1</loop>
+                <margin>0</margin>
+                <stagePadding>0</stagePadding>
+                <lazyLoad>1</lazyLoad>
+                <autoplay>1</autoplay>
+                <autoplayTimeout>3000</autoplayTimeout>
+                <autoplayHoverPause>1</autoplayHoverPause>
+                <nav_brk1>0</nav_brk1>
+                <items_brk1>2</items_brk1>
+                <dots_brk1>1</dots_brk1>
+                <center_brk1>0</center_brk1>
+                <stagePadding_brk1>0</stagePadding_brk1>
+                <nav_brk2>0</nav_brk2>
+                <items_brk2>3</items_brk2>
+                <dots_brk2>1</dots_brk2>
+                <center_brk2>0</center_brk2>
+                <stagePadding_brk2>0</stagePadding_brk2>
+                <nav_brk3>0</nav_brk3>
+                <dots_brk3>1</dots_brk3>
+                <items_brk3>4</items_brk3>
+                <center_brk3>0</center_brk3>
+                <stagePadding_brk3>0</stagePadding_brk3>
+                <nav_brk4>1</nav_brk4>
+                <items_brk4>5</items_brk4>
+                <dots_brk4>1</dots_brk4>
+                <center_brk4>0</center_brk4>
+                <stagePadding_brk4>0</stagePadding_brk4>
+            </sell_products>
+            <recently_viewed>
+                <status>1</status>
+                <title>Recently viewed products</title>
+                <show_price>1</show_price>
+                <show_addto>1</show_addto>
+                <show_wishlist>0</show_wishlist>
+                <show_compare>0</show_compare>
+                <random_sort>0</random_sort>
+                <max_items>15</max_items>
+                <nav>1</nav>
+                <dots>1</dots>
+                <center>0</center>
+                <items>5</items>
+                <loop>1</loop>
+                <margin>0</margin>
+                <stagePadding>0</stagePadding>
+                <lazyLoad>1</lazyLoad>
+                <autoplay>1</autoplay>
+                <autoplayTimeout>3000</autoplayTimeout>
+                <autoplayHoverPause>1</autoplayHoverPause>
+                <nav_brk1>0</nav_brk1>
+                <dots_brk1>1</dots_brk1>
+                <items_brk1>2</items_brk1>
+                <center_brk1>0</center_brk1>
+                <stagePadding_brk1>0</stagePadding_brk1>
+                <nav_brk2>0</nav_brk2>
+                <dots_brk2>1</dots_brk2>
+                <items_brk2>3</items_brk2>
+                <center_brk2>0</center_brk2>
+                <stagePadding_brk2>0</stagePadding_brk2>
+                <nav_brk3>0</nav_brk3>
+                <dots_brk3>1</dots_brk3>
+                <items_brk3>4</items_brk3>
+                <center_brk3>0</center_brk3>
+                <stagePadding_brk3>0</stagePadding_brk3>
+                <nav_brk4>1</nav_brk4>
+                <dots_brk4>1</dots_brk4>
+                <items_brk4>5</items_brk4>
+                <center_brk4>0</center_brk4>
+                <stagePadding_brk4>0</stagePadding_brk4>
+            </recently_viewed>
+            <related_products>
+                <status>1</status>
+                <title>Related products</title>
+                <max_items>15</max_items>
+                <nav>1</nav>
+                <dots>1</dots>
+                <center>0</center>
+                <items>5</items>
+                <loop>1</loop>
+                <margin>0</margin>
+                <stagePadding>0</stagePadding>
+                <lazyLoad>1</lazyLoad>
+                <autoplay>1</autoplay>
+                <autoplayTimeout>3000</autoplayTimeout>
+                <autoplayHoverPause>1</autoplayHoverPause>
+                <nav_brk1>0</nav_brk1>
+                <dots_brk1>1</dots_brk1>
+                <items_brk1>2</items_brk1>
+                <center_brk1>0</center_brk1>
+                <stagePadding_brk1>0</stagePadding_brk1>
+                <nav_brk2>0</nav_brk2>
+                <items_brk2>3</items_brk2>
+                <dots_brk2>1</dots_brk2>
+                <center_brk2>0</center_brk2>
+                <stagePadding_brk2>0</stagePadding_brk2>
+                <nav_brk3>0</nav_brk3>
+                <dots_brk3>1</dots_brk3>
+                <items_brk3>4</items_brk3>
+                <center_brk3>0</center_brk3>
+                <stagePadding_brk3>0</stagePadding_brk3>
+                <nav_brk4>1</nav_brk4>
+                <dots_brk4>1</dots_brk4>
+                <items_brk4>5</items_brk4>
+                <center_brk4>0</center_brk4>
+                <stagePadding_brk4>0</stagePadding_brk4>
+            </related_products>
+            <upsell_products>
+                <status>1</status>
+                <title>Upsell products</title>
+                <max_items>15</max_items>
+                <nav>1</nav>
+                <dots>1</dots>
+                <center>0</center>
+                <items>5</items>
+                <loop>1</loop>
+                <margin>0</margin>
+                <stagePadding>0</stagePadding>
+                <lazyLoad>1</lazyLoad>
+                <autoplay>1</autoplay>
+                <autoplayTimeout>3000</autoplayTimeout>
+                <autoplayHoverPause>1</autoplayHoverPause>
+                <nav_brk1>0</nav_brk1>
+                <dots_brk1>1</dots_brk1>
+                <items_brk1>2</items_brk1>
+                <center_brk1>0</center_brk1>
+                <stagePadding_brk1>0</stagePadding_brk1>
+                <nav_brk2>0</nav_brk2>
+                <dots_brk2>1</dots_brk2>
+                <items_brk2>3</items_brk2>
+                <center_brk2>0</center_brk2>
+                <stagePadding_brk2>0</stagePadding_brk2>
+                <nav_brk3>0</nav_brk3>
+                <dots_brk3>1</dots_brk3>
+                <items_brk3>4</items_brk3>
+                <center_brk3>0</center_brk3>
+                <stagePadding_brk3>0</stagePadding_brk3>
+                <nav_brk4>1</nav_brk4>
+                <dots_brk4>1</dots_brk4>
+                <items_brk4>5</items_brk4>
+                <center_brk4>0</center_brk4>
+                <stagePadding_brk4>0</stagePadding_brk4>
+            </upsell_products>
+            <crosssell_products>
+                <status>1</status>
+                <title>Cross sell products</title>
+                <max_items>15</max_items>
+                <nav>1</nav>
+                <dots>1</dots>
+                <center>0</center>
+                <items>5</items>
+                <loop>1</loop>
+                <margin>0</margin>
+                <stagePadding>0</stagePadding>
+                <lazyLoad>1</lazyLoad>
+                <autoplay>1</autoplay>
+                <autoplayTimeout>3000</autoplayTimeout>
+                <autoplayHoverPause>1</autoplayHoverPause>
+                <nav_brk1>0</nav_brk1>
+                <dots_brk1>1</dots_brk1>
+                <items_brk1>2</items_brk1>
+                <center_brk1>0</center_brk1>
+                <stagePadding_brk1>0</stagePadding_brk1>
+                <nav_brk2>0</nav_brk2>
+                <dots_brk2>1</dots_brk2>
+                <items_brk2>3</items_brk2>
+                <center_brk2>0</center_brk2>
+                <stagePadding_brk2>0</stagePadding_brk2>
+                <nav_brk3>0</nav_brk3>
+                <dots_brk3>1</dots_brk3>
+                <items_brk3>4</items_brk3>
+                <center_brk3>0</center_brk3>
+                <stagePadding_brk3>0</stagePadding_brk3>
+                <nav_brk4>1</nav_brk4>
+                <dots_brk4>1</dots_brk4>
+                <items_brk4>5</items_brk4>
+                <center_brk4>0</center_brk4>
+                <stagePadding_brk4>0</stagePadding_brk4>
+            </crosssell_products>
+        </weltpixel_owl_carousel_config>
+    </default>
+</config>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/frontend/di.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/frontend/di.xml
new file mode 100644
index 000000000..42d8dedaa
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/frontend/di.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
+    <preference for="Magento\Catalog\Block\Product\ImageBuilder" type="WeltPixel\OwlCarouselSlider\Block\Product\ImageBuilder" />
+</config>
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/module.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/module.xml
new file mode 100644
index 000000000..a57fd73e3
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/module.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
+    <module name="WeltPixel_OwlCarouselSlider" setup_version="1.0.5">
+        <sequence>
+            <module name="WeltPixel_Backend"/>
+        </sequence>
+    </module>
+</config>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/etc/widget.xml b/app/code/WeltPixel/OwlCarouselSlider/etc/widget.xml
new file mode 100644
index 000000000..099b464f4
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/etc/widget.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
+    <widget id="weltpixel_custom_slider" class="WeltPixel\OwlCarouselSlider\Block\Slider\Custom" placeholder_image="WeltPixel_OwlCarouselSlider::images/custom_widget_slider.png">
+        <label translate="true">WeltPixel - Custom Slider Widget</label>
+        <description>WeltPixel - Custom Slider Widget</description>
+        <parameters>
+            <parameter name="slider_id" xsi:type="select" source_model="WeltPixel\OwlCarouselSlider\Model\Config\Source\WidgetCustom" visible="true" sort_order="10" >
+                <label translate="true">Custom Slider</label>
+            </parameter>
+        </parameters>
+    </widget>
+
+    <widget id="weltpixel_products_slider" class="WeltPixel\OwlCarouselSlider\Block\Slider\Products" placeholder_image="WeltPixel_OwlCarouselSlider::images/product_widget_slider.png">
+        <label translate="true">WeltPixel - Products Carousel Widget</label>
+        <description>WeltPixel - Products Slider Widget</description>
+        <parameters>
+            <parameter name="products_type" xsi:type="select" source_model="WeltPixel\OwlCarouselSlider\Model\Config\Source\WidgetProducts" visible="true" sort_order="10" >
+                <label translate="true">Products Slider Type</label>
+            </parameter>
+        </parameters>
+    </widget>
+
+    <widget id="weltpixel_category_slider" class="WeltPixel\OwlCarouselSlider\Block\Slider\Category" placeholder_image="WeltPixel_OwlCarouselSlider::images/product_widget_slider.png">
+        <label translate="true">WeltPixel - Custom Category Product Carousel</label>
+        <description>WeltPixel - Category Slider Widget</description>
+        <parameters>
+            <parameter name="upgrade_to_pro_required"  xsi:type="text" visible="false" required="true" sort_order="5">
+            </parameter>
+            <parameter name="upgrade_to_pro" xsi:type="block" visible="true" required="true" sort_order="5">
+                <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Widget\UpgradeToPro" />
+            </parameter>
+        </parameters>
+    </widget>
+</widgets>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/i18n/en_US.csv b/app/code/WeltPixel/OwlCarouselSlider/i18n/en_US.csv
new file mode 100644
index 000000000..9dcd8b1ab
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/i18n/en_US.csv
@@ -0,0 +1,165 @@
+Banners,Banners
+"Add New Banner","Add New Banner"
+"Save Banner","Save Banner"
+"Close Window","Close Window"
+"Save and Continue Edit","Save and Continue Edit"
+"Save and Close","Save and Close"
+"Banner Details","Banner Details"
+Title,Title
+"Show Title","Show Title"
+Yes,Yes
+No,No
+Description,Description
+"Show Description","Show Description"
+Status,Status
+"Banner Status","Banner Status"
+Slider,Slider
+URL,URL
+"GA Promo ID","GA Promo ID"
+"GA Promo Name","GA Promo Name"
+"GA Promo Creative","GA Promo Creative"
+"GA Promo Position","GA Promo Position"
+Target,Target
+"Same Window","Same Window"
+"New Window Tab","New Window Tab"
+"Button Text","Button Text"
+"Insert the text which is displayed on the button. To display the button make sure you fill the URL filed also.","Insert the text which is displayed on the button. To display the button make sure you fill the URL filed also."
+"Banner Type","Banner Type"
+Video,Video
+Image,Image
+"Mobile Image","Mobile Image"
+"Create Custom Banner here","Create Custom Banner here"
+"Alt Text","Alt Text"
+"Banner Class","Banner Class"
+"Wrapper class name of the current banner. It can be used in Custom CSS field to style each banner from the slider. This is displayed only after you 
+                    saved the banner.","Wrapper class name of the current banner. It can be used in Custom CSS field to style each banner from the slider. This is displayed only after you 
+                    saved the banner."
+"Custom HTML Content","Custom HTML Content"
+"Custom CSS","Custom CSS"
+"Banner Valid From","Banner Valid From"
+"Valid From","Valid From"
+"Banner Valid To","Banner Valid To"
+"Valid To","Valid To"
+"Edit Banner '%1'","Edit Banner '%1'"
+"New Banner","New Banner"
+"Banner Information","Banner Information"
+"Banner ID","Banner ID"
+"Slider ID","Slider ID"
+Edit,Edit
+CSV,CSV
+XML,XML
+Excel,Excel
+Delete,Delete
+"Are you sure?","Are you sure?"
+"Change Status","Change Status"
+Sliders,Sliders
+"Add New Slider","Add New Slider"
+"Save Slider","Save Slider"
+"Create Banner","Create Banner"
+"You have to save the banner and close this window!","You have to save the banner and close this window!"
+"Banner Title","Banner Title"
+"Sort Order","Sort Order"
+"Slider Details","Slider Details"
+"Slider Status","Slider Status"
+"<strong>Slider General Configuration</strong>","<strong>Slider General Configuration</strong>"
+"Next/Prev Buttons","Next/Prev Buttons"
+True,True
+False,False
+Dots,Dots
+"Banner Transition Effect","Banner Transition Effect"
+"Center Item","Center Item"
+StagePadding,StagePadding
+Margin,Margin
+Items,Items
+Loop,Loop
+LazyLoad,LazyLoad
+Autoplay,Autoplay
+AutoplayTimeout,AutoplayTimeout
+AutoplayHoverPause,AutoplayHoverPause
+"Auto Height","Auto Height"
+"<strong>Slider Responsive Breakpoints.<br/>This configuration will overwrite the main slider options.</strong>","<strong>Slider Responsive Breakpoints.<br/>This configuration will overwrite the main slider options.</strong>"
+"Breakpoint 1","Breakpoint 1"
+"Breakpoint 2","Breakpoint 2"
+"Breakpoint 3","Breakpoint 3"
+"Breakpoint 4","Breakpoint 4"
+"Edit Slider '%1'","Edit Slider '%1'"
+"New Slider","New Slider"
+"Slider Information","Slider Information"
+"Change status","Change status"
+"General Carousel Settings","General Carousel Settings"
+"General Slider Settings","General Slider Settings"
+"Breakpoint ","Breakpoint "
+"Breakpoint Carousel Options","Breakpoint Carousel Options"
+"This configuration will overwrite the General Carousel Options.","This configuration will overwrite the General Carousel Options."
+"General Carousel Options","General Carousel Options"
+"<b style=""font-size: 16px""><a style=""font-size: 16px"" target=""_blank"" href=""https://www.weltpixel.com/owl-carousel-and-slider.html"">Upgrade to Pro version</a> to enable this functionality.</b>","<b style=""font-size: 16px""><a style=""font-size: 16px"" target=""_blank"" href=""https://www.weltpixel.com/owl-carousel-and-slider.html"">Upgrade to Pro version</a> to enable this functionality.</b>"
+"Delete successfully!","Delete successfully!"
+"Please select banner(s).","Please select banner(s)."
+"A total of %1 banner(s) have been deleted.","A total of %1 banner(s) have been deleted."
+"A total of %1 banner(s) status have been changed.","A total of %1 banner(s) status have been changed."
+"The banner has been saved.","The banner has been saved."
+"Something went wrong while saving the banner.","Something went wrong while saving the banner."
+"Delete successfully !","Delete successfully !"
+"This slider no longer exists.","This slider no longer exists."
+"Please select slider(s).","Please select slider(s)."
+"A total of %1 slider(s) have been deleted.","A total of %1 slider(s) have been deleted."
+"A total of %1 slider(s) status have been changed.","A total of %1 slider(s) status have been changed."
+"The slider has been saved.","The slider has been saved."
+"Something went wrong while saving the slider.","Something went wrong while saving the slider."
+"--- Please select a slider ---","--- Please select a slider ---"
+Custom,Custom
+"Default Magento","Default Magento"
+"Specific Category","Specific Category"
+"Default Magento & Specific Category","Default Magento & Specific Category"
+"Select Custom Slider...","Select Custom Slider..."
+"Select Products Slider...","Select Products Slider..."
+"New Products","New Products"
+"Best-sell Products","Best-sell Products"
+"Sale Products","Sale Products"
+"Recently Viewed","Recently Viewed"
+Slide,Slide
+Fade,Fade
+Enabled,Enabled
+Disabled,Disabled
+"Related Products","Related Products"
+"We found other products you might like!","We found other products you might like!"
+"More Choices:","More Choices:"
+"Check items to add to the cart or","Check items to add to the cart or"
+"select all","select all"
+"Add to Cart","Add to Cart"
+"In stock","In stock"
+"Out of stock","Out of stock"
+"Add to Wish List","Add to Wish List"
+"Add to Compare","Add to Compare"
+"View More","View More"
+"OWL Product Carousels","OWL Product Carousels"
+"General Configuration for OWL Product Carousels and Banner Sliders","General Configuration for OWL Product Carousels and Banner Sliders"
+"Display wishlist","Display wishlist"
+"Display compare","Display compare"
+"New Products Carousel Settings","New Products Carousel Settings"
+"Enable Carousel","Enable Carousel"
+"Show Price","Show Price"
+"Show Add To Cart","Show Add To Cart"
+"Show Wishlist","Show Wishlist"
+"Show Compare","Show Compare"
+"Random Sort","Random Sort"
+"Max Items","Max Items"
+Center,Center
+"Best Sell Products Carousel Settings","Best Sell Products Carousel Settings"
+"Sale Products Carousel Settings","Sale Products Carousel Settings"
+"Recently Viewed Products Carousel Settings","Recently Viewed Products Carousel Settings"
+"Related Products Carousel Settings","Related Products Carousel Settings"
+"Up-Sells Products Carousel Settings","Up-Sells Products Carousel Settings"
+"Cross-Sell Products Carousel Settings","Cross-Sell Products Carousel Settings"
+"Custom Category Products Carousel Settings","Custom Category Products Carousel Settings"
+"Owl Slider","Owl Slider"
+"General Settings","General Settings"
+"Enable Google Analytics Tracking","Enable Google Analytics Tracking"
+"Enable Hover Image on products","Enable Hover Image on products"
+"Mobile Breakpoint","Mobile Breakpoint"
+" <b style=""font-size: 16px""><a style=""font-size: 16px"" target=""_blank"" href=""https://www.weltpixel.com/owl-carousel-and-slider.html"">Upgrade to Pro version</a> to enable this functionality.</b> "," <b style=""font-size: 16px""><a style=""font-size: 16px"" target=""_blank"" href=""https://www.weltpixel.com/owl-carousel-and-slider.html"">Upgrade to Pro version</a> to enable this functionality.</b> "
+"WeltPixel - Custom Slider Widget","WeltPixel - Custom Slider Widget"
+"Custom Slider","Custom Slider"
+"WeltPixel - Products Carousel Widget","WeltPixel - Products Carousel Widget"
+"Products Slider Type","Products Slider Type"
+"WeltPixel - Custom Category Product Carousel","WeltPixel - Custom Category Product Carousel"
diff --git a/app/code/WeltPixel/OwlCarouselSlider/registration.php b/app/code/WeltPixel/OwlCarouselSlider/registration.php
new file mode 100644
index 000000000..7dade5011
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/registration.php
@@ -0,0 +1,7 @@
+<?php
+
+\Magento\Framework\Component\ComponentRegistrar::register(
+    \Magento\Framework\Component\ComponentRegistrar::MODULE,
+    'WeltPixel_OwlCarouselSlider',
+    __DIR__
+);
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_edit.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_edit.xml
new file mode 100644
index 000000000..436681027
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_edit.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <head>
+        <title>WeltPixel Banners Manager</title>
+    </head>
+    <body>
+        <referenceBlock name="menu">
+            <action method="setActive">
+                <argument name="itemId" xsi:type="string">WeltPixel_OwlCarouselSlider::OwlCarouselBanners</argument>
+            </action>
+        </referenceBlock>
+        <referenceContainer name="content">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Edit" name="banner_edit"/>
+        </referenceContainer>
+        <referenceContainer name="left">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Edit\Tabs" name="banner_edit_tabs">
+            <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Edit\Tab\Banner" name="banner_edit_tab_banner"/>
+        	<action method="addTab">
+                <argument name="name" xsi:type="string">main_section</argument>
+                <argument name="block" xsi:type="string">banner_edit_tab_banner</argument>
+            </action>
+        </block>
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_grid.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_grid.xml
new file mode 100644
index 000000000..bd9ecd6c6
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_grid.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
+    <update handle="formkey"/>
+    <container name="root">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner\Grid" name="admin.block.banner.grid"/>
+    </container>
+</layout>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_index.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_index.xml
new file mode 100644
index 000000000..fef7bb917
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_index.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <update handle="formkey"/>
+    <head>
+    	<title>WeltPixel Banners Manager</title>
+    </head>
+    <body>
+    	<referenceBlock name="menu">
+    	    <action method="setActive">
+    	        <argument name="itemId" xsi:type="string">WeltPixel_OwlCarouselSlider::OwlCarouselBanners</argument>
+    	    </action>
+    	</referenceBlock>
+    	<referenceBlock name="page.title">
+    	    <action method="setPageTitle">
+    	        <argument name="pageTitle" xsi:type="string">WeltPixel Banners Manager</argument>
+    	    </action>
+    	</referenceBlock>
+        <referenceContainer name="content">
+            <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner" name="admin.block.banner.grid.container"/>
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_new.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_new.xml
new file mode 100644
index 000000000..c5e494c9a
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_banner_new.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <update handle="weltowlcarousel_banner_edit"/>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_index_index.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_index_index.xml
new file mode 100644
index 000000000..41605c48d
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_index_index.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <update handle="formkey"/>
+    <body>
+          <referenceContainer name="content">
+            <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Banner" name="admin.block.banner.grid.container"/>
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_banners.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_banners.xml
new file mode 100644
index 000000000..7087d9f66
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_banners.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
+    <container name="root" label="Root">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tab\Banners" name="owlcarouselslider.slider.edit.tab.banners"/>
+        <block class="Magento\Backend\Block\Widget\Grid\Serializer" name="crosssell_grid_serializer">
+            <arguments>
+                <argument name="input_names" xsi:type="string">sort_order</argument>
+                <argument name="grid_block" xsi:type="string">owlcarouselslider.slider.edit.tab.banners</argument>
+                <argument name="callback" xsi:type="string">getSelectedSliderBanners</argument>
+                <argument name="input_element_name" xsi:type="string">slider_banner</argument>
+                <argument name="reload_param_name" xsi:type="string">banner</argument>
+            </arguments>
+        </block>
+    </container>
+</layout>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_bannersgrid.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_bannersgrid.xml
new file mode 100644
index 000000000..81c7aa13a
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_bannersgrid.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
+    <container name="root" label="Root">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tab\Banners" name="owlcarouselslider.slider.edit.tab.banners"/>
+    </container>
+</layout>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_edit.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_edit.xml
new file mode 100644
index 000000000..25277d960
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_edit.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <head>
+        <title>WeltPixel Sliders Manager</title>
+    </head>
+    <body>
+        <referenceBlock name="menu">
+            <action method="setActive">
+                <argument name="itemId" xsi:type="string">WeltPixel_OwlCarouselSlider::OwlCarouselSliders</argument>
+            </action>
+        </referenceBlock>
+        <referenceContainer name="content">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit" name="banner_edit"/>
+        </referenceContainer>
+        <referenceContainer name="left">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tabs" name="banner_edit_tabs">
+            <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Edit\Tab\Form" name="banner_edit_tab_form"/>
+        	<action method="addTab">
+                <argument name="name" xsi:type="string">main_section</argument>
+                <argument name="block" xsi:type="string">banner_edit_tab_form</argument>
+            </action>
+            <action method="addTab">
+                <argument name="name" xsi:type="string">banner_section</argument>
+                <argument name="block" xsi:type="array">
+                    <item name="label" xsi:type="string">Slider Banners</item>
+                    <item name="title" xsi:type="string">Slider Banners</item>
+                    <item name="url" xsi:type="helper" helper="WeltPixel\OwlCarouselSlider\Helper\Data::getSliderBannerUrl"></item>
+                    <item name="class" xsi:type="string">ajax</item>
+                </argument>
+            </action>
+        </block>
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_grid.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_grid.xml
new file mode 100644
index 000000000..29049476a
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_grid.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/layout_generic.xsd">
+    <update handle="formkey"/>
+    <container name="root">
+        <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider\Grid" name="admin.block.slider.grid"/>
+    </container>
+</layout>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_index.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_index.xml
new file mode 100644
index 000000000..030465949
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_index.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <update handle="formkey"/>
+    <head>
+    	<title>WeltPixel Sliders Manager</title>
+    </head>
+    <body>
+    	<referenceBlock name="menu">
+    	    <action method="setActive">
+    	        <argument name="itemId" xsi:type="string">WeltPixel_OwlCarouselSlider::OwlCarouselSliders</argument>
+    	    </action>
+    	</referenceBlock>
+    	<referenceBlock name="page.title">
+    	    <action method="setPageTitle">
+    	        <argument name="pageTitle" xsi:type="string">Sliders Manager</argument>
+    	    </action>
+    	</referenceBlock>
+        <referenceContainer name="content">
+            <block class="WeltPixel\OwlCarouselSlider\Block\Adminhtml\Slider" name="admin.block.slider.grid.container"/>
+        </referenceContainer>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_new.xml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_new.xml
new file mode 100644
index 000000000..527aaeacc
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/layout/weltowlcarousel_slider_new.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <update handle="weltowlcarousel_slider_edit"/>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/templates/form/renderer/fieldset/element.phtml b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/templates/form/renderer/fieldset/element.phtml
new file mode 100644
index 000000000..1e8eb090c
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/templates/form/renderer/fieldset/element.phtml
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+// @codingStandardsIgnoreFile
+
+?>
+<?php
+/**
+ * @see \WeltPixel\OwlCarouselSlider\Block\Adminhtml\Form\Renderer\Fieldset\Element
+ */
+?>
+<?php
+/* @var $block \Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Element */
+$element = $block->getElement();
+$note = $element->getNote() ? '<div class="note">' . $element->getNote() . '</div>' : '';
+$elementBeforeLabel = $element->getExtType() == 'checkbox' || $element->getExtType() == 'radio';
+$addOn = $element->getBeforeElementHtml() || $element->getAfterElementHtml();
+$fieldId = ($element->getHtmlId()) ? ' id="attribute-' . $element->getHtmlId() . '-container"' : '';
+$fieldClass = "field field-{$element->getId()} {$element->getCssClass()}";
+$fieldClass .= ($elementBeforeLabel) ? ' choice' : '';
+$fieldClass .= ($addOn) ? ' with-addon' : '';
+$fieldClass .= ($element->getRequired()) ? ' required' : '';
+$fieldClass .= ($note) ? ' with-note' : '';
+
+$fieldAttributes = $fieldId . ' class="' . $fieldClass . '" '
+    . $block->getUiId('form-field', $element->getId());
+?>
+
+<?php
+    $elementToggleCode = $element->getToggleCode() ? $element->getToggleCode()
+        : 'toggleValueElements(this, this.parentNode.parentNode.parentNode)';
+?>
+<?php if (!$element->getNoDisplay()): ?>
+    <?php if ($element->getType() == 'hidden'): ?>
+        <?php echo $element->getElementHtml() ?>
+    <?php else: ?>
+    <div<?php echo $fieldAttributes ?> data-attribute-code="<?php echo $element->getHtmlId() ?>"
+        data-apply-to="<?php echo $block->escapeHtml($this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode(
+            $element->hasEntityAttribute() ? $element->getEntityAttribute()->getApplyTo() : []
+        ))?>"
+        >
+        <?php if ($elementBeforeLabel): ?>
+            <?php echo $block->getElementHtml() ?>
+            <?php echo $element->getLabelHtml() ?>
+            <?php echo $note ?>
+        <?php else: ?>
+            <?php echo $element->getLabelHtml() ?>
+            <div class="control">
+                <?php echo($addOn) ? '<div class="addon">' . $block->getElementHtml() . '</div>' : $block->getElementHtml(); ?>
+                <?php echo $note ?>
+            </div>
+        <?php endif; ?>
+       
+    </div>
+    <?php endif; ?>
+<?php endif; ?>
+<script type="text/javascript">
+require(['jquery'],function ($) {
+    $('#<?php echo $element->getHtmlId() ?>_default').click(function(event) {
+        $('#<?php echo $element->getHtmlId() ?>').prop('disabled', $(this).prop('checked'));
+        $(this).val($(this).prop('checked'));
+        if(this.id == 'page_image_default') {
+            $('#page_image_delete').prop('disabled', $(this).prop('checked'));
+            $('#page_image_delete').next().toggleClass('disabled');
+        }
+    });
+});
+</script>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/web/images/custom_widget_slider.png b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/web/images/custom_widget_slider.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a41fbcd1992b28ee8a48e724f4bca0ff92c29dc
GIT binary patch
literal 710
zcmeAS@N?(olHy`uVBq!ia0y~yU}$DwVBq0kV_;x#tmeyRU|?V=cJd72;Nak>;YjIV
zU|`@Z@Q5sCVBi)4Va7{$>;5n>Fvyg+MwA5Sr<If^7Ns&crsOB3D!649rIzOxWfv<r
z2b;avv#E!Hfyu$s#W5tJ_3ey}`Bw}?j@4)SJ1};xOj^bAN~|r!>E*S~#)+MrD?Qef
zyg#)60_(x91c#*bv{y~%c)liGY+T9R)YvsG%w$SQM{G^l8w<rL*0J`QU7zR8zc2p!
z=jO>vbi5fRsVKIXoPN*zz2UIKc9x1oOMa|Lel}GkzL|M`a*lyPugPhBZB0I=+UJe4
z57hOpzw({?fNQdie#^;2J((sVOb7HATqwV+w`Dy;-K*7Wdbe%ZvL|TPYVMco3O7Ff
zIj^?zf1AI?HFN)O#q;N|osISTDE5OvCVCr_M`P%kLtKfOl}qnP<*Ds^{-5{o^1kbl
zpL*slx3laOah~;*zwx_Q*ISd*^O?4<3}JZCVeiFYz+J<5t#S7Orm0#}s@9l3m^vv*
z-{rvfLwUD*SAX7}Z2EL_?!J@X3b~$ccw726_MRd4q38LhHIE#(GqzzedeCcjcVX05
zMUew+i?b3pFxxB->OHq&_KJXuH)@lAeK~k~>RXB5*9wd|MHhbD`Ti37@?DlqAIv^3
z*0lT(dw)Gc_{xw(GbKH#Z%cYEmtA7b{r=Hz`{fyTmLFZPq+(*)Pv!?~8)RoDx4pXX
zgKr1lAGWfs`HU4Z&PHKM$KTdm6wBT5{qH)%<X(;DNsmfT%P=Rzdw#rBs-ZdWr^nAH
z=f65u{NK9t+Sl!^+BX$BzZd2v=SO{w-PWnMGgoEbe80?T{Ed4Q|H~D4dv3h!QWEt+
z|D1Yy>xG#QgIxZ|Oq@UEa+9as;~Vk9-CkY()7~o=tX2Fc{qX+f;7(6%re<M<(p3t4
T0lZ2K3=9mOu6{1-oD!M<%RNNJ

literal 0
HcmV?d00001

diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/web/images/product_widget_slider.png b/app/code/WeltPixel/OwlCarouselSlider/view/adminhtml/web/images/product_widget_slider.png
new file mode 100644
index 0000000000000000000000000000000000000000..a3f88d392b5e7d02cd2d60cad8d252cd13009410
GIT binary patch
literal 829
zcmeAS@N?(olHy`uVBq!ia0y~yVCZCEVBq3lV_;xtV5r^Cz`(##?Bp53!NI{%!;#X#
zz`(#+;1OBOz`!j8!i<;h*8O2%V2~+sjVKAuPb(=;EJ|f?Ovz75RdCBJN-fVX$}U!L
z4mNwSXHyRY1Jia-7srr@*0(qIcZ-ILuzxsz`>Jl3t776-5yyjqGgS@NPgLz);?Wh7
zq^{AV@PvPZSK<a9k4r2}nv*(OB`&e75pOAVkhu`JF))N<qtM}ZX}$YIzW1KtGtR$v
zd;9J*&wU1G?#Mr%^M3E=z0dE>^jm+O**$Id<;rP#s}#B>|F!68w&<$e(a8US<NQaS
z^PhEM*WLQxzqZ>+TG-V!R3UKAn~p~*jO8Dt^&YQL=#VeudHzv#-!cEdIWqa&Hn-=#
zp1Qt}&9LvU!M3Y*zE9QSrH`)9{CDc<*C!^13*PeVx)Hc4`UulE?we0a_vh`N5b5Vu
zXmnNV%el2b{R(@vr<^^MQ@-x{k?-f${ydlVIb-(zuTQqDjp=ywL?rJKf6S}!^$DEy
zk7jLndgg%~UjqL!mV-xr@a%UfEaKb$Eb`ay4JloW;>>HNt^T{JG<EkT-^urPiN|l#
zzV%A2W=4hY<JHG9ABR6*ea>Haf1-uym$v~zo+9eYKMJl((%*N~M2(eECsEw)==T|i
z_e{uC`}KF)$4&1)DegPisg_jQyk_<f$MdDk>yNFvH7)+1fqs&R$w%pJ`%bNYRX<_H
z@uwlN3P(S$^0{<8W!_T%LdCAhw=GmUmKs#Gh5umbRG25~s3QJJ=j`vlQYZ7%s`9#{
z=Y9EpH2aF~_Fb=zKeY9EQ?7J!^OtrFzkfpKq`xn=xY^6U)^73vX~kllg&Z4Xty|YF
zKcHB%G3=9cqvPu0fZuM(Q)awATPP8~+Q@U>(r~Y%`>&=q`@Q_Pt$zNBk6-U<q^!<}
zdf3d@pZhg8eYWGwWf|GG7ae;T{xm>5UHA6csHEu^HTShz&%OFKaE{L-E4yRwf-ZB{
zw4P^8+#`5Sv3tji^q0+Mm;Sr*-1`52ZN>6lwTU7fk5b%zWLYZJ2%UeB{_y!NW}9Qe
sHfJ|~d3)^Ay;~Lc)8_{UW;~Yf{&@A&DMq!o3=9kmp00i_>zopr0H^AYRsaA1

literal 0
HcmV?d00001

diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/catalog_product_view.xml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/catalog_product_view.xml
new file mode 100644
index 000000000..68e6e489f
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/catalog_product_view.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0"?>
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <body>
+        <referenceBlock name="catalog.product.related">
+            <action method="setTemplate">
+                <argument name='template' xsi:type='string'>WeltPixel_OwlCarouselSlider::product/list/items.phtml</argument>
+            </action>
+        </referenceBlock>
+        <referenceBlock name="product.info.upsell">
+            <action method="setTemplate">
+                <argument name='template' xsi:type='string'>WeltPixel_OwlCarouselSlider::product/list/items.phtml</argument>
+            </action>
+        </referenceBlock>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/checkout_cart_index.xml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/checkout_cart_index.xml
new file mode 100644
index 000000000..eae15753f
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/checkout_cart_index.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <body>
+        <referenceBlock name="checkout.cart.crosssell">
+            <action method="setTemplate">
+                <argument name='template' xsi:type='string'>WeltPixel_OwlCarouselSlider::product/list/items.phtml</argument>
+            </action>
+        </referenceBlock>
+    </body>
+</page>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/default.xml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/default.xml
new file mode 100644
index 000000000..4c3e98897
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/layout/default.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <head>
+        <css src="WeltPixel_OwlCarouselSlider::css/owl.carousel.css" />
+        <!--<css src="WeltPixel_OwlCarouselSlider::css/animate.css" />-->
+    </head>
+</page>
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/requirejs-config.js b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/requirejs-config.js
new file mode 100644
index 000000000..d3ad2e284
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/requirejs-config.js
@@ -0,0 +1,16 @@
+var config = {
+    map: {
+        '*': {
+            owl_carousel: 'WeltPixel_OwlCarouselSlider/js/owl.carousel',
+            owl_config: 'WeltPixel_OwlCarouselSlider/js/owl.config'
+        }
+    },
+    shim: {
+        owl_carousel: {
+            deps: ['jquery']
+        },
+        owl_config: {
+            deps: ['jquery','owl_carousel']
+        }
+    }
+};
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image.phtml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image.phtml
new file mode 100644
index 000000000..8384f0cdb
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image.phtml
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Copyright © 2013-2017 Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+?>
+<?php /** @var $block \Magento\Catalog\Block\Product\Image */ ?>
+
+<img class="photo image <?php if ($block->getLazyLoad()): echo 'owl-lazy'; endif; ?>"
+    <?php /* @escapeNotVerified */ echo $block->getCustomAttributes(); ?>
+    <?php if (!$block->getLazyLoad()): ?>
+        src="<?php /* @escapeNotVerified */ echo $block->getImageUrl(); ?>"
+    <?php endif; ?>
+     width="<?php /* @escapeNotVerified */ echo $block->getWidth(); ?>"
+     height="<?php /* @escapeNotVerified */ echo $block->getHeight(); ?>"
+     alt="<?php /* @escapeNotVerified */ echo $block->stripTags($block->getLabel(), null, true); ?>"
+    <?php if ($block->getLazyLoad()): ?>
+        data-src="<?php /* @escapeNotVerified */ echo $block->getImageUrl(); ?>"
+        data-src-retina="<?php /* @escapeNotVerified */ echo $block->getImageUrl(); ?>"
+    <?php endif; ?>
+/>
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image_with_borders.phtml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image_with_borders.phtml
new file mode 100644
index 000000000..16eb3ff00
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/image_with_borders.phtml
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Copyright © 2013-2017 Magento, Inc. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+?>
+<?php /** @var $block \Magento\Catalog\Block\Product\Image */ ?>
+
+<span class="product-image-container"
+      style="width:<?php /* @escapeNotVerified */ echo $block->getWidth()?>px;">
+    <span class="product-image-wrapper"
+          style="padding-bottom: <?php /* @escapeNotVerified */ echo ($block->getRatio() * 100); ?>%;">
+        <img class="product-image-photo <?php if ($block->getLazyLoad()): echo 'owl-lazy'; endif; ?>"
+            <?php /* @escapeNotVerified */ echo $block->getCustomAttributes(); ?>
+            <?php if (!$block->getLazyLoad()): ?>
+                src="<?php /* @escapeNotVerified */ echo $block->getImageUrl(); ?>"
+            <?php endif ;?>
+             width="<?php /* @escapeNotVerified */ echo $block->getResizedImageWidth(); ?>"
+             height="<?php /* @escapeNotVerified */ echo $block->getResizedImageHeight(); ?>"
+             alt="<?php /* @escapeNotVerified */ echo $block->stripTags($block->getLabel(), null, true); ?>"
+            <?php if ($block->getLazyLoad()): ?>
+                data-src="<?php /* @escapeNotVerified */ echo $block->getImageUrl(); ?>"
+                data-src-retina="<?php /* @escapeNotVerified */ echo $block->getImageUrl(); ?>"
+            <?php endif; ?>
+        /></span>
+</span>
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/list/items.phtml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/list/items.phtml
new file mode 100644
index 000000000..b278a58de
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/product/list/items.phtml
@@ -0,0 +1,409 @@
+<?php
+/**
+ * Copyright © 2016 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+// @codingStandardsIgnoreFile
+
+/* @var $block \Magento\Catalog\Block\Product\AbstractProduct */
+?>
+
+<?php
+/* @var WeltPixel\OwlCarouselSlider\Helper\Products $helper */
+$helper = $this->helper('WeltPixel\OwlCarouselSlider\Helper\Products');
+$sliderConfiguration = $helper->getSliderConfiguration($block->getType());
+$sliderConfig = json_encode($sliderConfiguration);
+$helperCustom = $this->helper('WeltPixel\OwlCarouselSlider\Helper\Custom');
+$breakpointConfiguration = $helperCustom->getBreakpointConfiguration();
+$displaySocial = $helperCustom->getDisplaySocial();
+$breakpoint   = $breakpointConfiguration;
+$enableSlider = (array_key_exists('status', $sliderConfiguration) && $sliderConfiguration['status'] == 1) ? true : false ;
+$imageCreationOptions = [];
+if ($enableSlider) {
+    $imageCreationOptions['weltpixel_owlcarousel'] = true;
+    if ($sliderConfiguration['lazyLoad']) {
+        $imageCreationOptions['weltpixel_lazyLoad'] = true;
+    }
+}
+?>
+<?php
+switch ($type = $block->getType()) {
+
+    case 'related-rule':
+        if ($exist = $block->hasItems()) {
+            $type = 'related';
+            $class = $type;
+
+            $image = 'related_products_list';
+            $title = ($sliderConfiguration['title']) ? $sliderConfiguration['title'] : __('Related Products');
+            $items = $block->getAllItems();
+            $limit = $block->getPositionLimit();
+            $shuffle = (int) $block->isShuffled();
+            $canItemsAddToCart = $block->canItemsAddToCart();
+
+            $showWishlist = $displaySocial['display_wishlist'];
+            $showCompare = $displaySocial['display_compare'];
+            $showCart = false;
+            $templateType = null;
+            $description = false;
+        }
+        break;
+
+    case 'related':
+        /** @var \Magento\Catalog\Block\Product\ProductList\Related $block */
+        if ($exist = $block->getItems()->getSize()) {
+            $type = 'related';
+            $class = $type;
+
+            $image = 'related_products_list';
+            $title = ($sliderConfiguration['title']) ? $sliderConfiguration['title'] : __('Related Products');
+            $items = $block->getItems();
+            $limit = 0;
+            $shuffle = 0;
+            $canItemsAddToCart = $block->canItemsAddToCart();
+
+            $showWishlist = $displaySocial['display_wishlist'];
+            $showCompare = $displaySocial['display_compare'];
+            $showCart = false;
+            $templateType = null;
+            $description = false;
+        }
+        break;
+
+    case 'upsell-rule':
+        if ($exist = $block->hasItems()) {
+            $type = 'upsell';
+            $class = $type;
+
+            $image = 'upsell_products_list';
+            $title = ($sliderConfiguration['title']) ? $sliderConfiguration['title'] : __('We found other products you might like!');
+            $items = $block->getAllItems();
+            $limit = $block->getPositionLimit();
+            $shuffle = (int) $block->isShuffled();
+
+            $showWishlist = $displaySocial['display_wishlist'];
+            $showCompare = $displaySocial['display_compare'];
+            $showCart = false;
+            $templateType = null;
+            $description = false;
+            $canItemsAddToCart = false;
+        }
+        break;
+
+    case 'upsell':
+        /** @var \Magento\Catalog\Block\Product\ProductList\Upsell $block */
+        if ($exist = count($block->getItemCollection()->getItems())) {
+            $type = 'upsell';
+            $class = $type;
+
+            $image = 'upsell_products_list';
+            $title = ($sliderConfiguration['title']) ? $sliderConfiguration['title'] : __('We found other products you might like!');
+            $items = $block->getItemCollection()->getItems();
+            $limit = $block->getItemLimit('upsell');
+            $shuffle = 0;
+
+            $showWishlist = $displaySocial['display_wishlist'];
+            $showCompare = $displaySocial['display_compare'];
+            $showCart = false;
+            $templateType = null;
+            $description = false;
+            $canItemsAddToCart = false;
+        }
+        break;
+
+    case 'crosssell-rule':
+        /** @var \Magento\Catalog\Block\Product\ProductList\Crosssell $block */
+        if ($exist = $block->hasItems()) {
+            $type = 'crosssell';
+            $class = $type;
+
+            $image = 'cart_cross_sell_products';
+            $title = ($sliderConfiguration['title']) ? $sliderConfiguration['title'] : __('More Choices:');
+            $items = $block->getItemCollection();
+
+            $showWishlist = $displaySocial['display_wishlist'];
+            $showCompare = $displaySocial['display_compare'];
+            $showCart = true;
+            $templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
+            $description = false;
+            $canItemsAddToCart = false;
+        }
+        break;
+
+    case 'crosssell':
+        /** @var \Magento\Catalog\Block\Product\ProductList\Crosssell $block */
+        if ($exist = $block->getItemCount()) {
+            $type = 'crosssell';
+            $class = $type;
+
+            $image = 'cart_cross_sell_products';
+            $title = ($sliderConfiguration['title']) ? $sliderConfiguration['title'] : __('More Choices:');
+            $items = $block->getItems();
+
+            $showWishlist = $displaySocial['display_wishlist'];
+            $showCompare = $displaySocial['display_compare'];
+            $showCart = true;
+            $templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
+            $description = false;
+            $canItemsAddToCart = false;
+        }
+        break;
+
+    case 'new':
+        if ($exist = $block->getProductCollection()) {
+            $type = 'new';
+            $mode = 'grid';
+            $type = $type . ' ' . $mode;
+
+            $class = 'widget' . ' ' . $type;
+
+            $image = 'new_products_content_widget_grid';
+            $title = ($sliderConfiguration['title']) ? $sliderConfiguration['title'] : __('New Products');
+            $items = $exist;
+
+            $showWishlist = $displaySocial['display_wishlist'];
+            $showCompare = $displaySocial['display_compare'];
+            $showCart = true;
+            $templateType = \Magento\Catalog\Block\Product\ReviewRendererInterface::SHORT_VIEW;
+            $description = ($mode == 'list') ? true : false;
+            $canItemsAddToCart = false;
+        }
+        break;
+
+    case 'other':
+        break;
+}
+?>
+
+<?php if ($exist):?>
+
+<?php if ($type == 'related' || $type == 'upsell'): ?>
+<?php if ($type == 'related'): ?>
+<div class="block-margin block <?php /* @escapeNotVerified */ echo $class . !$enableSlider ? ' row' : ''; ?>" data-mage-init='{"relatedProducts":{"relatedCheckbox":".related.checkbox"}}' data-limit="<?php /* @escapeNotVerified */ echo $limit; ?>" data-shuffle="<?php /* @escapeNotVerified */ echo $shuffle; ?>">
+    <?php else: ?>
+    <div class="block-margin block <?php /* @escapeNotVerified */ echo $class . !$enableSlider ? ' row' : ''; ?>" data-mage-init='{"upsellProducts":{}}' data-limit="<?php /* @escapeNotVerified */ echo $limit; ?>" data-shuffle="<?php /* @escapeNotVerified */ echo $shuffle; ?>">
+        <?php endif; ?>
+        <?php else: ?>
+        <div class="block <?php /* @escapeNotVerified */ echo $class; ?>">
+            <?php endif; ?>
+            <h3 class="block-title title">
+                <span id="block-<?php /* @escapeNotVerified */ echo $class?>-heading" role="heading" aria-level="2"><?php /* @escapeNotVerified */ echo $title; ?></span>
+            </h3>
+            <div class="block-content content" aria-labelledby="block-<?php /* @escapeNotVerified */ echo $class?>-heading">
+                <?php if ($type == 'related' && $canItemsAddToCart): ?>
+                    <div class="block-actions">
+                        <?php /* @escapeNotVerified */ echo __('Check items to add to the cart or') ?>
+                        <button type="button" class="action select" role="select-all"><span><?php /* @escapeNotVerified */ echo __('select all') ?></span></button>
+                    </div>
+                <?php endif; ?>
+                <div class="products wrapper grid products-grid products-<?php /* @escapeNotVerified */ echo $type; ?>">
+                    <ol class="products list items product-items<?php echo $enableSlider ? ' owl-carousel-products-' . $type : ''; ?>">
+                        <?php $product_item = $enableSlider ? '' : ' product-item'; ?>
+                        <?php $iterator = 1; ?>
+                        <?php foreach ($items as $_item): ?>
+                            <?php $available = ''; ?>
+                            <?php if (!$_item->isComposite() && $_item->isSaleable() && $type == 'related'): ?>
+                                <?php if (!$_item->getRequiredOptions()): ?>
+                                    <?php $available = 'related-available'; ?>
+                                <?php endif; ?>
+                            <?php endif; ?>
+
+                            <?php if ($type == 'related' || $type == 'upsell'): ?>
+                                <?php /* @escapeNotVerified */ echo($iterator++ == 1) ? '<li class="item product product-item" style="">' : '</li><li class="item product product-item" style="">' ?>
+                            <?php else: ?>
+                                <?php /* @escapeNotVerified */ echo($iterator++ == 1) ? '<li class="item product product-item">' : '</li><li class="item product product-item">' ?>
+                            <?php endif; ?>
+
+                            <div class="product-item-info <?php /* @escapeNotVerified */ echo $available; ?>">
+                                <?php /* @escapeNotVerified */ echo '<!-- ' . $image . '-->' ?>
+                                <a href="<?php /* @escapeNotVerified */ echo $block->getProductUrl($_item) ?>" class="product photo product-item-photo">
+                                    <?php echo $block->getImage($_item, $image, $imageCreationOptions)->toHtml(); ?>
+                                </a>
+                                <div class="product details product-item-details">
+                                    <strong class="product name product-item-name">
+                                        <a class="product-item-link" title="<?php echo $block->escapeHtml($_item->getName()) ?>" href="<?php /* @escapeNotVerified */ echo $block->getProductUrl($_item) ?>">
+                                            <?php echo $block->escapeHtml($_item->getName()) ?>
+                                        </a>
+                                    </strong>
+
+                                <?php /* @escapeNotVerified */ echo $block->getProductPrice($_item); ?>
+
+                                <?php if ($templateType): ?>
+                                    <?php echo $block->getReviewsSummaryHtml($_item, $templateType) ?>
+                                <?php endif; ?>
+
+                                <?php if (!$_item->isComposite() && $_item->isSaleable() && $type == 'related'): ?>
+                                    <?php if (!$_item->getRequiredOptions()): ?>
+                                        <div class="field choice related">
+                                            <input type="checkbox" class="checkbox related" id="related-checkbox<?php /* @escapeNotVerified */ echo $_item->getId() ?>" name="related_products[]" value="<?php /* @escapeNotVerified */ echo $_item->getId() ?>" />
+                                            <label class="label" for="related-checkbox<?php /* @escapeNotVerified */ echo $_item->getId() ?>"><span><?php /* @escapeNotVerified */ echo __('Add to Cart') ?></span></label>
+                                        </div>
+                                    <?php endif; ?>
+                                <?php endif; ?>
+
+                                <?php if ($showWishlist || $showCompare || $showCart): ?>
+                                    <div class="product actions product-item-actions">
+                                        <?php if ($showCart): ?>
+                                            <div class="actions-primary">
+                                                <?php if ($_item->isSaleable()): ?>
+                                                    <?php if ($_item->getTypeInstance()->hasRequiredOptions($_item)): ?>
+                                                        <button class="action tocart primary" data-mage-init='{"redirectUrl": {"url": "<?php /* @escapeNotVerified */ echo $block->getAddToCartUrl($_item) ?>"}}' type="button" title="<?php /* @escapeNotVerified */ echo __('Add to Cart') ?>">
+                                                            <span><?php /* @escapeNotVerified */ echo __('Add to Cart') ?></span>
+                                                        </button>
+                                                    <?php else: ?>
+                                                        <?php $postDataHelper = $this->helper('Magento\Framework\Data\Helper\PostHelper');
+                                                        $postData = $postDataHelper->getPostData($block->getAddToCartUrl($_item), ['product' => $_item->getEntityId()])
+                                                        ?>
+                                                        <button class="action tocart primary"
+                                                                data-post='<?php /* @escapeNotVerified */ echo $postData; ?>'
+                                                                type="button" title="<?php /* @escapeNotVerified */ echo __('Add to Cart') ?>">
+                                                            <span><?php /* @escapeNotVerified */ echo __('Add to Cart') ?></span>
+                                                        </button>
+                                                    <?php endif; ?>
+                                                <?php else: ?>
+                                                    <?php if ($_item->getIsSalable()): ?>
+                                                        <div class="stock available"><span><?php /* @escapeNotVerified */ echo __('In stock') ?></span></div>
+                                                    <?php else: ?>
+                                                        <div class="stock unavailable"><span><?php /* @escapeNotVerified */ echo __('Out of stock') ?></span></div>
+                                                    <?php endif; ?>
+                                                <?php endif; ?>
+                                            </div>
+                                        <?php endif; ?>
+
+                                            <?php if ($showWishlist || $showCompare): ?>
+                                                <div class="secondary-addto-links actions-secondary" data-role="add-to-links">
+                                                    <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?>
+                                                        <a href="#" data-post='<?php /* @escapeNotVerified */ echo $block->getAddToWishlistParams($_item); ?>'  class="action towishlist" data-action="add-to-wishlist" title="<?php /* @escapeNotVerified */ echo __('Add to Wish List') ?>">
+                                                            <span><?php /* @escapeNotVerified */ echo __('Add to Wish List') ?></span>
+                                                        </a>
+                                                    <?php endif; ?>
+                                                    <?php if ($block->getAddToCompareUrl() && $showCompare): ?>
+                                                        <?php
+                                                        $compareHelper = $this->helper('Magento\Catalog\Helper\Product\Compare');
+                                                        ?>
+                                                        <a href="#" class="action tocompare"
+                                                           data-post='<?php /* @escapeNotVerified */ echo $compareHelper->getPostDataParams($_item);?>'
+                                                           data-role="add-to-links"
+                                                           title="<?php /* @escapeNotVerified */ echo __('Add to Compare'); ?>">
+                                                            <span><?php /* @escapeNotVerified */ echo __('Add to Compare') ?></span>
+                                                        </a>
+                                                    <?php endif; ?>
+                                                </div>
+                                            <?php endif; ?>
+                                        </div>
+                                    <?php endif; ?>
+                                </div>
+                            </div>
+                            <?php echo($iterator == count($items)+1) ? '</li>' : '' ?>
+                        <?php endforeach ?>
+                    </ol>
+                    <?php if($enableSlider) : ?>
+					<div id="pre-div">
+						<div class="cssload-loader">
+							<div class="cssload-inner cssload-one"></div>
+							<div class="cssload-inner cssload-two"></div>
+							<div class="cssload-inner cssload-three"></div>
+						</div>
+					</div>
+					<?php endif; ?>
+                </div>
+            </div>
+        </div>
+        <?php endif;?>
+
+    <?php if($enableSlider) : ?>
+    <script>
+        require(['jquery', 'owl_carousel', 'owl_config' ],
+            function ($) {
+                $(document).ready(function() {
+                    var products_type = '<?php echo $type;?>',
+                        slider_config = <?php echo $sliderConfig; ?>,
+
+                        carouselElement = $('.owl-carousel-products-' + products_type),
+
+                        windowWidth = $(window).width(),
+                        carouselWidth = carouselElement.width(),
+                        carouselContainer = carouselWidth + 120,
+
+                        items = ((slider_config.items >= 0 && slider_config.items != null) ? slider_config.items : 2),
+
+                        stagePadding = slider_config.stagePadding != '' ? parseInt(slider_config.stagePadding) : 0,
+
+                        sPBrk_1 = slider_config.stagePadding_brk1 != '' ? parseInt(slider_config.stagePadding_brk1) : 0,
+                        sPBrk_2 = slider_config.stagePadding_brk2 != '' ? parseInt(slider_config.stagePadding_brk2) : 0,
+                        sPBrk_3 = slider_config.stagePadding_brk3 != '' ? parseInt(slider_config.stagePadding_brk3) : 0,
+                        sPBrk_4 = slider_config.stagePadding_brk4 != '' ? parseInt(slider_config.stagePadding_brk4) : 0;
+
+                         /** Lazyload bug when fewer items exist in the carousel then the ones displayed */
+                        carouselElement.on('initialized.owl.carousel', function(event){
+                            var scopeSize = event.page.size;
+                            for (var i = 0; i < scopeSize; i++){
+                                var imgsrc = $(event.target).find('.owl-item').eq(i).find('img').attr('data-src');
+                                $(event.target).find('.owl-item').eq(i).find('img').attr('src', imgsrc);
+                                $(event.target).find('.owl-item').eq(i).find('img').attr('style', 'opacity: 1;');
+                            }
+                        });
+
+                    carouselElement.owlCarousel({
+                        nav                 :parseInt(slider_config.nav) == 1 ? true : false,
+                        dots                :parseInt(slider_config.dots) == 1 ? true : false,
+                        center              :parseInt(slider_config.center) == 1 ? true : false,
+                        items               :items,
+                        loop                :parseInt(slider_config.loop) == 1 ? true : false,
+                        margin              :parseInt(slider_config.margin) != '' ? parseInt(slider_config.margin) : 0,
+                        stagePadding        :parseInt(slider_config.center) == 1 ? 0 : stagePadding,
+                        lazyLoad            :parseInt(slider_config.lazyLoad) == 1 ? true : false,
+                        autoplay            :parseInt(slider_config.autoplay) == 1 ? true : false,
+                        autoplayTimeout     :(slider_config.autoplayTimeout > 0 && slider_config.autoplayTimeout != null) ? parseInt(slider_config.autoplayTimeout) : 3000,
+                        autoplayHoverPause  :parseInt(slider_config.autoplayHoverPause) == 1 ? true : false,
+                        autoHeight          :false,
+
+
+                        responsive:{
+                            <?php echo $breakpoint['breakpoint_1']; ?>:{
+                                nav             :parseInt(slider_config.nav_brk1) == 1 ? true : false,
+                                dots            :parseInt(slider_config.dots_brk1) == 1 ? true : false,
+                                items           :(slider_config.items_brk1  >= 0 && slider_config.items_brk1 != null) ? parseInt(slider_config.items_brk1) : items,
+                                center          :parseInt(slider_config.center_brk1) == 1 ? true : false,
+                                stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_1,
+                            },
+                            <?php echo $breakpoint['breakpoint_2']; ?>:{
+                                nav             :parseInt(slider_config.nav_brk2) == 1 ? true : false,
+                                dots            :parseInt(slider_config.dots_brk2) == 1 ? true : false,
+                                items           :(slider_config.items_brk2  >= 0 && slider_config.items_brk2 != null) ? parseInt(slider_config.items_brk2) : items,
+                                center          :parseInt(slider_config.center_brk2) == 1 ? true : false,
+                                stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_2,
+                            },
+                            <?php echo $breakpoint['breakpoint_3']; ?>:{
+                                nav             :parseInt(slider_config.nav_brk3) == 1 ? true : false,
+                                dots            :parseInt(slider_config.dots_brk3) == 1 ? true : false,
+                                items           :(slider_config.items_brk3  >= 0 && slider_config.items_brk3 != null) ? parseInt(slider_config.items_brk3) : items,
+                                center          :parseInt(slider_config.center_brk3) == 1 ? true : false,
+                                stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_3,
+                            },
+                            <?php echo $breakpoint['breakpoint_4']; ?>:{
+                                nav             :parseInt(slider_config.nav_brk4) == 1 ? true : false,
+                                dots            :parseInt(slider_config.dots_brk4) == 1 ? true : false,
+                                items           :(slider_config.items_brk4  >= 0 && slider_config.items_brk4 != null) ? parseInt(slider_config.items_brk4) : items,
+                                center          :parseInt(slider_config.center_brk4) == 1 ? true : false,
+                                stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_4,
+                            }
+                        }
+                    });
+
+                    var carouselControls = carouselElement.find('.owl-nav');
+                    if (carouselContainer >= windowWidth) {
+                        carouselControls.find('.owl-prev').css({
+                            'left': 0,
+                            'top': -15
+                        });
+                        carouselControls.find('.owl-next').css({
+                            'right': 0,
+                            'top': -15
+                        });
+                    }
+                });
+            });
+    </script>
+    <?php endif;?>
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/custom.phtml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/custom.phtml
new file mode 100644
index 000000000..37b3bd069
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/custom.phtml
@@ -0,0 +1,223 @@
+<?php  /* @var \WeltPixel\OwlCarouselSlider\Block\Slider\Custom $this */ ?>
+
+<?php $sliderConfig  = $this->getSliderConfiguration(); ?>
+<?php $sliderGeneral = $sliderConfig['slider_config']; ?>
+<?php $enabled       = (array_key_exists('status', $sliderGeneral) && $sliderGeneral['status'] !=0) ? true : false; ?>
+
+<?php if ($enabled) : ?>
+
+    <?php
+    $sliderId     = $this->getData('slider_id');
+    $breakpoint   = $this->getBreakpointConfiguration();
+    $bannerConfig = $sliderConfig['banner_config'];
+    $sliderConfig = json_encode($sliderGeneral);
+    $mediaUrl     = $this->getMediaUrl();
+    $isGatEnabled = $this->isGatEnabled();
+    ?>
+    
+    <?php if ($sliderGeneral['show_title'] && trim($sliderGeneral['title'])) : ?>
+        <div class="content-heading">
+            <h2 class="title"><?php echo $sliderGeneral['title']; ?></h2>
+        </div>
+    <?php endif; ?>
+
+    <div class="custom-slider">
+        <div class="owl-carousel-custom-<?php echo $sliderId;?>">
+            <?php foreach($bannerConfig as $banner) : ?>
+                <?php
+                    $title = (array_key_exists('title', $banner) && $banner['title'] !='') ? $banner['title'] : false;
+                    $showTitle = array_key_exists('show_title', $banner) ? $banner['show_title'] : false;
+                    $description = (array_key_exists('description', $banner) && $banner['description'] !='')
+                        ? $banner['description'] : false;
+                    $showDescription = array_key_exists('show_description', $banner)
+                        ? $banner['show_description'] : false;
+                    $url = array_key_exists('url', $banner) ? $banner['url'] : null;
+                    $target = array_key_exists('target', $banner) ? $banner['target'] : '_blank';
+                    $bannerType = array_key_exists('banner_type', $banner) ? $banner['banner_type'] : '';
+                    $image = array_key_exists('image', $banner) ? $banner['image'] : '';
+                    $altText = array_key_exists('alt_text', $banner) ? $banner['alt_text'] : '';
+                    $video = array_key_exists('video', $banner) ? $banner['video'] : '';
+                    $custom = array_key_exists('custom', $banner) ? $banner['custom'] : '';
+                    $buttonText = array_key_exists('button_text', $banner) ? $banner['button_text'] : null;
+                    $customContent = array_key_exists('custom_content', $banner) ? $banner['custom_content'] : '';
+                    $customCss = array_key_exists('custom_css', $banner) ? $banner['custom_css'] : '';
+
+                    $gaPromoId = array_key_exists('ga_promo_id', $banner) ? $banner['ga_promo_id'] : '';
+                    $gaPromoName = array_key_exists('ga_promo_name', $banner) ? $banner['ga_promo_name'] : '';
+                    $gaPromoCreative = array_key_exists('ga_promo_creative', $banner) ? $banner['ga_promo_creative'] : '';
+                    $gaPromoPosition = array_key_exists('ga_promo_position', $banner) ? $banner['ga_promo_position'] : '';
+                ?>
+
+                    <div class="banner-item banner-<?php echo $banner['id']; ?>">
+                        <?php if ($bannerType == 1) : ?>
+                            <?php if (!$buttonText): ?>
+                                <?php if (isset($url)): ?>
+                                <a href="<?php echo $url; ?>" target="<?php echo $target; ?>"
+                                    <?php if($isGatEnabled):?>
+                                        data-track-promo-id="<?php echo $gaPromoId; ?>"
+                                        data-track-promo-name="<?php echo $gaPromoName; ?>"
+                                        data-track-promo-creative="<?php echo $gaPromoCreative; ?>"
+                                        data-track-promo-position="<?php echo $gaPromoPosition; ?>"
+                                    <?php endif;?>
+                                >
+                                <?php endif; ?>
+                                    <?php endif; ?>
+                                        <span class="banner-image">
+                                            <img
+                                                <?php if (!$sliderGeneral['lazyLoad']) : ?>
+                                                src="<?php echo $mediaUrl . $image; ?>"
+                                                <?php endif; ?>
+                                                 alt="<?php echo $altText; ?>" title="<?php echo $altText; ?>"
+                                                <?php echo $sliderGeneral['lazyLoad'] ? 'data-src="' . $mediaUrl
+                                                    . $image . '" data-src-retina="' . $mediaUrl . $image
+                                                    . '" class="owl-lazy"' : '' ?>
+                                            />
+                                        </span>
+                                    <?php if (!$buttonText): ?>
+                                <?php if (isset($url)): ?>
+                                </a>
+                                <?php endif; ?>
+                            <?php endif; ?>
+                        <?php elseif ($bannerType == 3) : ?>
+                            <?php if (!$buttonText): ?>
+                                <?php if ($url): ?>
+                                    <a href="<?php echo $url; ?>" target="<?php echo $target; ?>" >
+                                <?php endif; ?>
+                            <?php endif; ?>
+                                <span class="banner-custom">
+                                    <?php echo $custom; ?>
+                                </span>
+                            <?php if (!$buttonText): ?>
+                                <?php if ($url): ?>
+                                    </a>
+                                <?php endif; ?>
+                            <?php endif; ?>
+                        <?php elseif ($bannerType == 2) : ?>
+                            <span class="banner-video">
+                                <?php echo $video; ?>
+                            </span>
+                        <?php endif; ?>
+                        <div class="content_slider">
+                            <?php if ($showTitle && $title) : ?>
+                                <span class="banner-title"><?php echo $title; ?></span>
+                            <?php endif; ?>
+
+                            <?php if ($showDescription && $description) : ?>
+                                <span class="banner-description"><?php echo $description; ?></span>
+                            <?php endif; ?>
+
+                            <div class="buttons">
+                                <?php if ($buttonText && $url): ?>
+                                    <a class="action primary" href="<?php echo $url; ?>" target="<?php echo $target; ?>"
+                                        <?php if($isGatEnabled):?>
+                                            data-track-promo-id="<?php echo $gaPromoId; ?>"
+                                            data-track-promo-name="<?php echo $gaPromoName; ?>"
+                                            data-track-promo-creative="<?php echo $gaPromoCreative; ?>"
+                                            data-track-promo-position="<?php echo $gaPromoPosition; ?>"
+                                        <?php endif;?>
+                                    > <?php echo $buttonText; ?> </a>
+                                <?php endif; ?>
+                                <?php if ($customContent): ?>
+                                    <div class="clearfix"></div>
+                                    <div class="custom_content">
+                                        <?php echo $customContent; ?>
+                                        <?php if ($customCss): ?>
+                                            <style>
+                                                <?php echo $customCss; ?>
+                                            </style>
+                                        <?php endif; ?>
+                                    </div>
+                                <?php endif; ?>
+                            </div>
+                        </div>
+                    </div>
+
+            <?php endforeach; ?>
+        </div>
+        <div id="pre-div">
+            <div class="cssload-loader">
+                <div class="cssload-inner cssload-one"></div>
+                <div class="cssload-inner cssload-two"></div>
+                <div class="cssload-inner cssload-three"></div>
+            </div>
+        </div>
+    </div>
+
+    <script>
+        require(['jquery', 'owl_carousel', 'owl_config' ],
+            function ($) {
+                $(document).ready(function() {
+
+                    var slider_id = <?php echo $sliderId; ?>;
+                    var slider_config = <?php echo $sliderConfig; ?>;
+
+                    var items = ((slider_config.items >= 0 && slider_config.items != null) ? slider_config.items : 1);
+                    if(slider_config.transition != 'slide') {
+                        items = 1;
+                    }
+
+                    var stagePadding = slider_config.stagePadding != '' ? parseInt(slider_config.stagePadding) : 0;
+                    var animate_Out = slider_config.transition != 'fadeOut' ? true : false;
+
+                    /** Lazyload bug when fewer items exist in the carousel then the ones displayed */
+                    $('.owl-carousel-custom-'+slider_id).on('initialized.owl.carousel', function(event){
+                        var scopeSize = event.page.size;
+                        for (var i = 0; i < scopeSize; i++){
+                            var imgsrc = $(event.target).find('.owl-item').eq(i).find('img').attr('data-src');
+                            $(event.target).find('.owl-item').eq(i).find('img').attr('src', imgsrc);
+                            $(event.target).find('.owl-item').eq(i).find('img').attr('style', 'opacity: 1;');
+                        }
+                    });
+
+                    $('.owl-carousel-custom-'+slider_id).owlCarousel({
+                        nav               :parseInt(slider_config.nav) == 1 ? true : false,
+                        dots              :parseInt(slider_config.dots) == 1 ? true : false,
+                        center            :(slider_config.center == 1 && animate_Out) ? true : false,
+                        items             :items,
+                        loop              :parseInt(slider_config.loop) == 1 ? true : false,
+                        margin            :(slider_config.margin != '' && animate_Out) ? parseInt(slider_config.margin) : 0,
+                        stagePadding      :parseInt(slider_config.center) == 1 ? 0 : stagePadding,
+                        lazyLoad          :parseInt(slider_config.lazyLoad) == 1 ? true : false,
+                        autoplay          :parseInt(slider_config.autoplay) == 1 ? true : false,
+                        autoplayTimeout   :(parseInt(slider_config.autoplayTimeout) > 0 && slider_config.autoplayTimeout != null) ? parseInt(slider_config.autoplayTimeout) : 3000,
+                        autoplayHoverPause:parseInt(slider_config.autoplayHoverPause) == 1 ? true : false,
+                        autoHeight        :parseInt(slider_config.autoHeight) == 1 ? true : false,
+                        animateOut        :slider_config.transition == 'slide' ? false : slider_config.transition,
+
+
+                        responsive:{
+                            <?php echo $breakpoint['breakpoint_1']; ?>:{
+                                nav     :parseInt(slider_config.nav_brk1) == 1 ? true : false,
+                                items   :parseInt(slider_config.items_brk1  >= 0 ? slider_config.items_brk1 : 0),
+                            },
+                            <?php echo $breakpoint['breakpoint_2']; ?>:{
+                                nav     :parseInt(slider_config.nav_brk2) == 1 ? true : false,
+                                items   :parseInt(slider_config.items_brk2  >= 0 ? slider_config.items_brk2 : 0),
+                            },
+                            <?php echo $breakpoint['breakpoint_3']; ?>:{
+                                nav     :parseInt(slider_config.nav_brk3) == 1 ? true : false,
+                                items   :parseInt(slider_config.items_brk3  >= 0 ? slider_config.items_brk3 : 0),
+                            },
+                            <?php echo $breakpoint['breakpoint_4']; ?>:{
+                                nav     :parseInt(slider_config.nav_brk4) == 1 ? true : false,
+                                items   :parseInt(slider_config.items_brk4  >= 0 ? slider_config.items_brk4 : 0),
+                            }
+                        }
+                    });
+
+                    $('.owl-carousel-custom-'+slider_id).on('resized.owl.carousel', function (event) {
+                        var $that = $(this);
+                        setTimeout(function(){
+                            $that.find('.owl-height').css('height', $that.find('.owl-item.active').height());
+                        }, 100);
+                    });
+
+                    setTimeout(function(){
+                        var $that = $('.owl-carousel-custom-'+slider_id);
+                        $that.find('.owl-height').css('height', $that.find('.owl-item.active').height());
+                    }, 100);
+
+                });
+            });
+    </script>
+<?php endif; ?>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/products.phtml b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/products.phtml
new file mode 100644
index 000000000..180d05eb6
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/templates/sliders/products.phtml
@@ -0,0 +1,221 @@
+<?php /* @var \WeltPixel\OwlCarouselSlider\Block\Slider\Products $this */ ?>
+
+<?php $sliderData    = $this->getSliderConfiguration(); ?>
+<?php $enabled       = array_key_exists('status', $sliderData) ? $sliderData['status'] : ''; ?>
+<?php $showPrice     = array_key_exists('show_price', $sliderData) ? $sliderData['show_price'] : false; ?>
+<?php $showAddToCart = array_key_exists('show_addto', $sliderData) ? $sliderData['show_addto'] : false; ?>
+<?php $showWishlist  = (array_key_exists('show_wishlist', $sliderData) && $sliderData['show_wishlist'] !=0) ? true : false; ?>
+<?php $showCompare   = (array_key_exists('show_compare', $sliderData) && $sliderData['show_compare'] !=0) ? true : false; ?>
+<?php if(!$enabled){ return; } ?>
+
+<?php
+$products = $this->getProductCollection();
+
+if(!count($products)) { return; }
+
+$productsType = $this->getData('products_type');
+$sliderConfig = json_encode($sliderData);
+$sliderTitle  = array_key_exists('title', $sliderData) ? $sliderData['title'] : '';
+$breakpoint   = $this->getBreakpointConfiguration();
+
+?>
+
+<div class="custom-slider">
+    <?php if (trim($sliderTitle)) : ?>
+    <div class="content-heading">
+        <h2 class="title"><?php echo $sliderTitle; ?></h2>
+    </div>
+    <?php endif; ?>
+    <div class="owl-carousel-products-<?php echo $productsType;?> <?php echo count($products)== 1? 'owl-carousel-products-single-item': '';?>">
+        <?php foreach($products as $product) : ?>
+
+            <?php
+            $_imagehelper = $this->helper('Magento\Catalog\Helper\Image');
+            $productImage = $_imagehelper->init($product, 'category_page_list')->constrainOnly(FALSE)->keepAspectRatio(TRUE)->keepFrame(FALSE)->resize(400)->getUrl();
+            $productUrl   =  $product->getUrlModel()->getUrl($product);
+            ?>
+
+            <div class="item product product-item">
+                <div data-container="product-grid" class="product-item-info">
+                    <a tabindex="-1" class="product photo product-item-photo" href="<?php echo $productUrl; ?>">
+                        <span style="width:240px;" class="product-image-container">
+                            <span style="padding-bottom: 125%;" class="product-image-wrapper">
+                                <img width="240" height="300"
+                                     alt="<?php echo $product->getName(); ?>"
+                                    <?php if (!$sliderData['lazyLoad']) : ?>
+                                     src="<?php echo $productImage; ?>"
+                                     <?php endif; ?>
+                                     class="product-image-photo <?php echo $sliderData['lazyLoad'] ? 'owl-lazy' : '' ?>"
+                                    <?php echo $sliderData['lazyLoad'] ? 'data-src="' . $productImage . '" data-src-retina="' . $productImage . '"' : '' ?>
+                                />
+                            </span>
+                        </span>
+                    </a>
+                    <div class="product details product-item-details">
+                        <strong class="product name product-item-name">
+                            <a href="<?php echo $productUrl; ?>" class="product-item-link">
+                                <?php echo $product->getName(); ?>
+                            </a>
+                        </strong>
+                        <?php if($showPrice) : ?>
+                            <?php /* @escapeNotVerified */ echo $this->getProductPrice($product); ?>
+                        <?php endif; ?>
+                        <div class="product-item-inner">
+                            <div class="product actions product-item-actions">
+
+                                <?php if($showAddToCart) : ?>
+                                    <div class="actions-primary">
+                                            <?php if ($product->isSaleable()): ?>
+                                                <?php if ($product->getTypeInstance()->hasRequiredOptions($product)): ?>
+                                                    <button class="action tocart primary" data-mage-init='{"redirectUrl": {"url": "<?php /* @escapeNotVerified */ echo $block->getAddToCartUrl($product) ?>"}}' type="button" title="<?php /* @escapeNotVerified */ echo __('View More') ?>">
+                                                        <span><?php /* @escapeNotVerified */ echo __('View More') ?></span>
+                                                    </button>
+                                                <?php else: ?>
+                                                    <?php $postDataHelper = $this->helper('Magento\Framework\Data\Helper\PostHelper');
+                                                    $postData = $postDataHelper->getPostData($block->getAddToCartUrl($product), ['product' => $product->getEntityId()])
+                                                    ?>
+                                                    <button class="action tocart primary"
+                                                            data-post='<?php /* @escapeNotVerified */ echo $postData; ?>'
+                                                            type="button" title="<?php /* @escapeNotVerified */ echo __('Add to Cart') ?>">
+                                                        <span><?php /* @escapeNotVerified */ echo __('Add to Cart') ?></span>
+                                                    </button>
+                                                <?php endif; ?>
+                                            <?php else: ?>
+                                                <?php if ($product->getIsSalable()): ?>
+                                                    <div class="stock available"><span><?php /* @escapeNotVerified */ echo __('In stock') ?></span></div>
+                                                <?php else: ?>
+                                                    <div class="stock unavailable"><span><?php /* @escapeNotVerified */ echo __('Out of stock') ?></span></div>
+                                                <?php endif; ?>
+                                            <?php endif; ?>
+                                    </div>
+                                <?php endif; ?>
+
+                                <div class="actions-secondary" data-role="add-to-links">
+                                    <?php if ($showWishlist || $showCompare): ?>
+                                        <div class="secondary-addto-links actions-secondary" data-role="add-to-links">
+
+                                            <?php if ($this->helper('Magento\Wishlist\Helper\Data')->isAllow() && $showWishlist): ?>
+                                                <a href="#" data-post='<?php /* @escapeNotVerified */ echo $block->getAddToWishlistParams($product); ?>'  class="action towishlist" data-action="add-to-wishlist" title="<?php /* @escapeNotVerified */ echo __('Add to Wish List') ?>">
+                                                    <span><?php /* @escapeNotVerified */ echo __('Add to Wish List') ?></span>
+                                                </a>
+                                            <?php endif; ?>
+
+                                            <?php if ($block->getAddToCompareUrl() && $showCompare): ?>
+                                                <?php
+                                                $compareHelper = $this->helper('Magento\Catalog\Helper\Product\Compare');
+                                                ?>
+                                                <a href="#" class="action tocompare"
+                                                   data-post='<?php /* @escapeNotVerified */ echo $compareHelper->getPostDataParams($product);?>'
+                                                   data-role="add-to-links"
+                                                   title="<?php /* @escapeNotVerified */ echo __('Add to Compare'); ?>">
+                                                    <span><?php /* @escapeNotVerified */ echo __('Add to Compare') ?></span>
+                                                </a>
+                                            <?php endif; ?>
+                                        </div>
+                                    <?php endif; ?>
+                                </div>
+
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        <?php endforeach; ?>
+    </div>
+    <div id="pre-div">
+        <div class="cssload-loader">
+            <div class="cssload-inner cssload-one"></div>
+            <div class="cssload-inner cssload-two"></div>
+            <div class="cssload-inner cssload-three"></div>
+        </div>
+    </div>
+</div>
+
+<script>
+    require(['jquery', 'owl_carousel', 'owl_config', 'owl_config' ],
+        function ($) {
+            $(document).ready(function(){
+                var products_type = '<?php echo $productsType;?>',
+                    slider_config = <?php echo $sliderConfig; ?>,
+
+                    carouselElement = $('.owl-carousel-products-' + products_type),
+
+                    items = ((slider_config.items >= 0 && slider_config.items != null) ? slider_config.items : 2),
+
+                    stagePadding = slider_config.stagePadding != '' ? parseInt(slider_config.stagePadding) : 0,
+
+                    sPBrk_1 = slider_config.stagePadding_brk1 != '' ? parseInt(slider_config.stagePadding_brk1) : 0,
+                    sPBrk_2 = slider_config.stagePadding_brk2 != '' ? parseInt(slider_config.stagePadding_brk2) : 0,
+                    sPBrk_3 = slider_config.stagePadding_brk3 != '' ? parseInt(slider_config.stagePadding_brk3) : 0,
+                    sPBrk_4 = slider_config.stagePadding_brk4 != '' ? parseInt(slider_config.stagePadding_brk4) : 0;
+
+                options = {
+                    nav                 :parseInt(slider_config.nav) == 1 ? true : false,
+                    dots                :parseInt(slider_config.dots) == 1 ? true : false,
+                    center              :parseInt(slider_config.center) == 1 ? true : false,
+                    items               :items,
+                    loop                :parseInt(slider_config.loop) == 1 ? true : false,
+                    margin              :parseInt(slider_config.margin) != '' ? parseInt(slider_config.margin) : 0,
+                    stagePadding        :parseInt(slider_config.center) == 1 ? 0 : stagePadding,
+                    lazyLoad            :parseInt(slider_config.lazyLoad) == 1 ? true : false,
+                    autoplay            :parseInt(slider_config.autoplay) == 1 ? true : false,
+                    autoplayTimeout     :(slider_config.autoplayTimeout > 0 && slider_config.autoplayTimeout != null) ? parseInt(slider_config.autoplayTimeout) : 3000,
+                    autoplayHoverPause  :parseInt(slider_config.autoplayHoverPause) == 1 ? true : false,
+                    autoHeight          :false,
+
+                    responsive:{
+                        <?php echo $breakpoint['breakpoint_1']; ?>:{
+                            nav             :parseInt(slider_config.nav_brk1) == 1 ? true : false,
+                            dots            :parseInt(slider_config.dots_brk1) == 1 ? true : false,
+                            items           :(slider_config.items_brk1  >= 0 && slider_config.items_brk1 != null) ? parseInt(slider_config.items_brk1) : items,
+                            center          :parseInt(slider_config.center_brk1) == 1 ? true : false,
+                            stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_1
+                        },
+                        <?php echo $breakpoint['breakpoint_2']; ?>:{
+                            nav             :parseInt(slider_config.nav_brk2) == 1 ? true : false,
+                            dots            :parseInt(slider_config.dots_brk2) == 1 ? true : false,
+                            items           :(slider_config.items_brk2  >= 0 && slider_config.items_brk2 != null) ? parseInt(slider_config.items_brk2) : items,
+                            center          :parseInt(slider_config.center_brk2) == 1 ? true : false,
+                            stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_2
+                        },
+                        <?php echo $breakpoint['breakpoint_3']; ?>:{
+                            nav             :parseInt(slider_config.nav_brk3) == 1 ? true : false,
+                            dots            :parseInt(slider_config.dots_brk3) == 1 ? true : false,
+                            items           :(slider_config.items_brk3  >= 0 && slider_config.items_brk3 != null) ? parseInt(slider_config.items_brk3) : items,
+                            center          :parseInt(slider_config.center_brk3) == 1 ? true : false,
+                            stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_3
+                        },
+                        <?php echo $breakpoint['breakpoint_4']; ?>:{
+                            nav             :parseInt(slider_config.nav_brk4) == 1 ? true : false,
+                            dots            :parseInt(slider_config.dots_brk4) == 1 ? true : false,
+                            items           :(slider_config.items_brk4  >= 0 && slider_config.items_brk4 != null) ? parseInt(slider_config.items_brk4) : items,
+                            center          :parseInt(slider_config.center_brk4) == 1 ? true : false,
+                            stagePadding    :parseInt(slider_config.center) == 1 ? 0 : sPBrk_4,
+							
+                        }
+                    }
+                };
+				
+				// workaround for owl carousel
+				// fix nav buttons display on load even when set as false
+				carouselElement.on('initialized.owl.carousel', function(event) {
+					setTimeout(function(){
+						carouselElement.trigger('next.owl.carousel');
+					}, 370);
+				});
+
+                /** Lazyload bug when fewer items exist in the carousel then the ones displayed */
+                carouselElement.on('initialized.owl.carousel', function(event){
+                    var scopeSize = event.page.size;
+                    for (var i = 0; i < scopeSize; i++){
+                        var imgsrc = $(event.target).find('.owl-item').eq(i).find('img').attr('data-src');
+                        $(event.target).find('.owl-item').eq(i).find('img').attr('src', imgsrc);
+                        $(event.target).find('.owl-item').eq(i).find('img').attr('style', 'opacity: 1;');
+                    }
+                });
+
+				carouselElement.owlCarousel(options);
+
+            });
+        });
+</script>
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/animate.css b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/animate.css
new file mode 100644
index 000000000..7148b5765
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/animate.css
@@ -0,0 +1,3340 @@
+@charset "UTF-8";
+
+/*!
+ * animate.css -http://daneden.me/animate
+ * Version - 3.5.1
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
+ *
+ * Copyright (c) 2016 Daniel Eden
+ */
+
+.animated {
+  -webkit-animation-duration: 1s;
+  animation-duration: 1s;
+  -webkit-animation-fill-mode: both;
+  animation-fill-mode: both;
+}
+
+.animated.infinite {
+  -webkit-animation-iteration-count: infinite;
+  animation-iteration-count: infinite;
+}
+
+.animated.hinge {
+  -webkit-animation-duration: 2s;
+  animation-duration: 2s;
+}
+
+.animated.flipOutX,
+.animated.flipOutY,
+.animated.bounceIn,
+.animated.bounceOut {
+  -webkit-animation-duration: .75s;
+  animation-duration: .75s;
+}
+
+@-webkit-keyframes bounce {
+  from, 20%, 53%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    -webkit-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+  }
+
+  40%, 43% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -30px, 0);
+    transform: translate3d(0, -30px, 0);
+  }
+
+  70% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -15px, 0);
+    transform: translate3d(0, -15px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0,-4px,0);
+    transform: translate3d(0,-4px,0);
+  }
+}
+
+@keyframes bounce {
+  from, 20%, 53%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    -webkit-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+  }
+
+  40%, 43% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -30px, 0);
+    transform: translate3d(0, -30px, 0);
+  }
+
+  70% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -15px, 0);
+    transform: translate3d(0, -15px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0,-4px,0);
+    transform: translate3d(0,-4px,0);
+  }
+}
+
+.bounce {
+  -webkit-animation-name: bounce;
+  animation-name: bounce;
+  -webkit-transform-origin: center bottom;
+  transform-origin: center bottom;
+}
+
+@-webkit-keyframes flash {
+  from, 50%, to {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+@keyframes flash {
+  from, 50%, to {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+.flash {
+  -webkit-animation-name: flash;
+  animation-name: flash;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes pulse {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.05, 1.05, 1.05);
+    transform: scale3d(1.05, 1.05, 1.05);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes pulse {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.05, 1.05, 1.05);
+    transform: scale3d(1.05, 1.05, 1.05);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.pulse {
+  -webkit-animation-name: pulse;
+  animation-name: pulse;
+}
+
+@-webkit-keyframes rubberBand {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  30% {
+    -webkit-transform: scale3d(1.25, 0.75, 1);
+    transform: scale3d(1.25, 0.75, 1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(0.75, 1.25, 1);
+    transform: scale3d(0.75, 1.25, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.15, 0.85, 1);
+    transform: scale3d(1.15, 0.85, 1);
+  }
+
+  65% {
+    -webkit-transform: scale3d(.95, 1.05, 1);
+    transform: scale3d(.95, 1.05, 1);
+  }
+
+  75% {
+    -webkit-transform: scale3d(1.05, .95, 1);
+    transform: scale3d(1.05, .95, 1);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes rubberBand {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  30% {
+    -webkit-transform: scale3d(1.25, 0.75, 1);
+    transform: scale3d(1.25, 0.75, 1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(0.75, 1.25, 1);
+    transform: scale3d(0.75, 1.25, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.15, 0.85, 1);
+    transform: scale3d(1.15, 0.85, 1);
+  }
+
+  65% {
+    -webkit-transform: scale3d(.95, 1.05, 1);
+    transform: scale3d(.95, 1.05, 1);
+  }
+
+  75% {
+    -webkit-transform: scale3d(1.05, .95, 1);
+    transform: scale3d(1.05, .95, 1);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.rubberBand {
+  -webkit-animation-name: rubberBand;
+  animation-name: rubberBand;
+}
+
+@-webkit-keyframes shake {
+  from, to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+@keyframes shake {
+  from, to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+.shake {
+  -webkit-animation-name: shake;
+  animation-name: shake;
+}
+
+@-webkit-keyframes headShake {
+  0% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  6.5% {
+    -webkit-transform: translateX(-6px) rotateY(-9deg);
+    transform: translateX(-6px) rotateY(-9deg);
+  }
+
+  18.5% {
+    -webkit-transform: translateX(5px) rotateY(7deg);
+    transform: translateX(5px) rotateY(7deg);
+  }
+
+  31.5% {
+    -webkit-transform: translateX(-3px) rotateY(-5deg);
+    transform: translateX(-3px) rotateY(-5deg);
+  }
+
+  43.5% {
+    -webkit-transform: translateX(2px) rotateY(3deg);
+    transform: translateX(2px) rotateY(3deg);
+  }
+
+  50% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+@keyframes headShake {
+  0% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+
+  6.5% {
+    -webkit-transform: translateX(-6px) rotateY(-9deg);
+    transform: translateX(-6px) rotateY(-9deg);
+  }
+
+  18.5% {
+    -webkit-transform: translateX(5px) rotateY(7deg);
+    transform: translateX(5px) rotateY(7deg);
+  }
+
+  31.5% {
+    -webkit-transform: translateX(-3px) rotateY(-5deg);
+    transform: translateX(-3px) rotateY(-5deg);
+  }
+
+  43.5% {
+    -webkit-transform: translateX(2px) rotateY(3deg);
+    transform: translateX(2px) rotateY(3deg);
+  }
+
+  50% {
+    -webkit-transform: translateX(0);
+    transform: translateX(0);
+  }
+}
+
+.headShake {
+  -webkit-animation-timing-function: ease-in-out;
+  animation-timing-function: ease-in-out;
+  -webkit-animation-name: headShake;
+  animation-name: headShake;
+}
+
+@-webkit-keyframes swing {
+  20% {
+    -webkit-transform: rotate3d(0, 0, 1, 15deg);
+    transform: rotate3d(0, 0, 1, 15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate3d(0, 0, 1, -10deg);
+    transform: rotate3d(0, 0, 1, -10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate3d(0, 0, 1, 5deg);
+    transform: rotate3d(0, 0, 1, 5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate3d(0, 0, 1, -5deg);
+    transform: rotate3d(0, 0, 1, -5deg);
+  }
+
+  to {
+    -webkit-transform: rotate3d(0, 0, 1, 0deg);
+    transform: rotate3d(0, 0, 1, 0deg);
+  }
+}
+
+@keyframes swing {
+  20% {
+    -webkit-transform: rotate3d(0, 0, 1, 15deg);
+    transform: rotate3d(0, 0, 1, 15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate3d(0, 0, 1, -10deg);
+    transform: rotate3d(0, 0, 1, -10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate3d(0, 0, 1, 5deg);
+    transform: rotate3d(0, 0, 1, 5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate3d(0, 0, 1, -5deg);
+    transform: rotate3d(0, 0, 1, -5deg);
+  }
+
+  to {
+    -webkit-transform: rotate3d(0, 0, 1, 0deg);
+    transform: rotate3d(0, 0, 1, 0deg);
+  }
+}
+
+.swing {
+  -webkit-transform-origin: top center;
+  transform-origin: top center;
+  -webkit-animation-name: swing;
+  animation-name: swing;
+}
+
+@-webkit-keyframes tada {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes tada {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.tada {
+  -webkit-animation-name: tada;
+  animation-name: tada;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes wobble {
+  from {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  15% {
+    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+  }
+
+  30% {
+    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+  }
+
+  45% {
+    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+  }
+
+  60% {
+    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes wobble {
+  from {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  15% {
+    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+  }
+
+  30% {
+    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+  }
+
+  45% {
+    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+  }
+
+  60% {
+    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.wobble {
+  -webkit-animation-name: wobble;
+  animation-name: wobble;
+}
+
+@-webkit-keyframes jello {
+  from, 11.1%, to {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  22.2% {
+    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+    transform: skewX(-12.5deg) skewY(-12.5deg);
+  }
+
+  33.3% {
+    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+    transform: skewX(6.25deg) skewY(6.25deg);
+  }
+
+  44.4% {
+    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+    transform: skewX(-3.125deg) skewY(-3.125deg);
+  }
+
+  55.5% {
+    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+    transform: skewX(1.5625deg) skewY(1.5625deg);
+  }
+
+  66.6% {
+    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+    transform: skewX(-0.78125deg) skewY(-0.78125deg);
+  }
+
+  77.7% {
+    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+    transform: skewX(0.390625deg) skewY(0.390625deg);
+  }
+
+  88.8% {
+    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+  }
+}
+
+@keyframes jello {
+  from, 11.1%, to {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  22.2% {
+    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+    transform: skewX(-12.5deg) skewY(-12.5deg);
+  }
+
+  33.3% {
+    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+    transform: skewX(6.25deg) skewY(6.25deg);
+  }
+
+  44.4% {
+    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+    transform: skewX(-3.125deg) skewY(-3.125deg);
+  }
+
+  55.5% {
+    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+    transform: skewX(1.5625deg) skewY(1.5625deg);
+  }
+
+  66.6% {
+    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+    transform: skewX(-0.78125deg) skewY(-0.78125deg);
+  }
+
+  77.7% {
+    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+    transform: skewX(0.390625deg) skewY(0.390625deg);
+  }
+
+  88.8% {
+    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+  }
+}
+
+.jello {
+  -webkit-animation-name: jello;
+  animation-name: jello;
+  -webkit-transform-origin: center;
+  transform-origin: center;
+}
+
+@-webkit-keyframes bounceIn {
+  from, 20%, 40%, 60%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  20% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.03, 1.03, 1.03);
+    transform: scale3d(1.03, 1.03, 1.03);
+  }
+
+  80% {
+    -webkit-transform: scale3d(.97, .97, .97);
+    transform: scale3d(.97, .97, .97);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes bounceIn {
+  from, 20%, 40%, 60%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  20% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.03, 1.03, 1.03);
+    transform: scale3d(1.03, 1.03, 1.03);
+  }
+
+  80% {
+    -webkit-transform: scale3d(.97, .97, .97);
+    transform: scale3d(.97, .97, .97);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+.bounceIn {
+  -webkit-animation-name: bounceIn;
+  animation-name: bounceIn;
+}
+
+@-webkit-keyframes bounceInDown {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -3000px, 0);
+    transform: translate3d(0, -3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 25px, 0);
+    transform: translate3d(0, 25px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, 5px, 0);
+    transform: translate3d(0, 5px, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInDown {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -3000px, 0);
+    transform: translate3d(0, -3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 25px, 0);
+    transform: translate3d(0, 25px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, 5px, 0);
+    transform: translate3d(0, 5px, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.bounceInDown {
+  -webkit-animation-name: bounceInDown;
+  animation-name: bounceInDown;
+}
+
+@-webkit-keyframes bounceInLeft {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(-3000px, 0, 0);
+    transform: translate3d(-3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(25px, 0, 0);
+    transform: translate3d(25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(5px, 0, 0);
+    transform: translate3d(5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInLeft {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(-3000px, 0, 0);
+    transform: translate3d(-3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(25px, 0, 0);
+    transform: translate3d(25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(5px, 0, 0);
+    transform: translate3d(5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.bounceInLeft {
+  -webkit-animation-name: bounceInLeft;
+  animation-name: bounceInLeft;
+}
+
+@-webkit-keyframes bounceInRight {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(3000px, 0, 0);
+    transform: translate3d(3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(-25px, 0, 0);
+    transform: translate3d(-25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(-5px, 0, 0);
+    transform: translate3d(-5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInRight {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(3000px, 0, 0);
+    transform: translate3d(3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(-25px, 0, 0);
+    transform: translate3d(-25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(-5px, 0, 0);
+    transform: translate3d(-5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.bounceInRight {
+  -webkit-animation-name: bounceInRight;
+  animation-name: bounceInRight;
+}
+
+@-webkit-keyframes bounceInUp {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 3000px, 0);
+    transform: translate3d(0, 3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, -5px, 0);
+    transform: translate3d(0, -5px, 0);
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes bounceInUp {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 3000px, 0);
+    transform: translate3d(0, 3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, -5px, 0);
+    transform: translate3d(0, -5px, 0);
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.bounceInUp {
+  -webkit-animation-name: bounceInUp;
+  animation-name: bounceInUp;
+}
+
+@-webkit-keyframes bounceOut {
+  20% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  50%, 55% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+}
+
+@keyframes bounceOut {
+  20% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  50%, 55% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+}
+
+.bounceOut {
+  -webkit-animation-name: bounceOut;
+  animation-name: bounceOut;
+}
+
+@-webkit-keyframes bounceOutDown {
+  20% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@keyframes bounceOutDown {
+  20% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+.bounceOutDown {
+  -webkit-animation-name: bounceOutDown;
+  animation-name: bounceOutDown;
+}
+
+@-webkit-keyframes bounceOutLeft {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(20px, 0, 0);
+    transform: translate3d(20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+@keyframes bounceOutLeft {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(20px, 0, 0);
+    transform: translate3d(20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+.bounceOutLeft {
+  -webkit-animation-name: bounceOutLeft;
+  animation-name: bounceOutLeft;
+}
+
+@-webkit-keyframes bounceOutRight {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(-20px, 0, 0);
+    transform: translate3d(-20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+@keyframes bounceOutRight {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(-20px, 0, 0);
+    transform: translate3d(-20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+.bounceOutRight {
+  -webkit-animation-name: bounceOutRight;
+  animation-name: bounceOutRight;
+}
+
+@-webkit-keyframes bounceOutUp {
+  20% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 20px, 0);
+    transform: translate3d(0, 20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+@keyframes bounceOutUp {
+  20% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 20px, 0);
+    transform: translate3d(0, 20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+.bounceOutUp {
+  -webkit-animation-name: bounceOutUp;
+  animation-name: bounceOutUp;
+}
+
+@-webkit-keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+
+  to {
+    opacity: 1;
+  }
+}
+
+@keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+
+  to {
+    opacity: 1;
+  }
+}
+
+.fadeIn {
+  -webkit-animation-name: fadeIn;
+  animation-name: fadeIn;
+}
+
+@-webkit-keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInDown {
+  -webkit-animation-name: fadeInDown;
+  animation-name: fadeInDown;
+}
+
+@-webkit-keyframes fadeInDownBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInDownBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInDownBig {
+  -webkit-animation-name: fadeInDownBig;
+  animation-name: fadeInDownBig;
+}
+
+@-webkit-keyframes fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInLeft {
+  -webkit-animation-name: fadeInLeft;
+  animation-name: fadeInLeft;
+}
+
+@-webkit-keyframes fadeInLeftBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInLeftBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInLeftBig {
+  -webkit-animation-name: fadeInLeftBig;
+  animation-name: fadeInLeftBig;
+}
+
+@-webkit-keyframes fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInRight {
+  -webkit-animation-name: fadeInRight;
+  animation-name: fadeInRight;
+}
+
+@-webkit-keyframes fadeInRightBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInRightBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInRightBig {
+  -webkit-animation-name: fadeInRightBig;
+  animation-name: fadeInRightBig;
+}
+
+@-webkit-keyframes fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInUp {
+  -webkit-animation-name: fadeInUp;
+  animation-name: fadeInUp;
+}
+
+@-webkit-keyframes fadeInUpBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInUpBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.fadeInUpBig {
+  -webkit-animation-name: fadeInUpBig;
+  animation-name: fadeInUpBig;
+}
+
+@-webkit-keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+@keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+.fadeOut {
+  -webkit-animation-name: fadeOut;
+  animation-name: fadeOut;
+}
+
+@-webkit-keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+.fadeOutDown {
+  -webkit-animation-name: fadeOutDown;
+  animation-name: fadeOutDown;
+}
+
+@-webkit-keyframes fadeOutDownBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@keyframes fadeOutDownBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+.fadeOutDownBig {
+  -webkit-animation-name: fadeOutDownBig;
+  animation-name: fadeOutDownBig;
+}
+
+@-webkit-keyframes fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+@keyframes fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+.fadeOutLeft {
+  -webkit-animation-name: fadeOutLeft;
+  animation-name: fadeOutLeft;
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+@keyframes fadeOutLeftBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+.fadeOutLeftBig {
+  -webkit-animation-name: fadeOutLeftBig;
+  animation-name: fadeOutLeftBig;
+}
+
+@-webkit-keyframes fadeOutRight {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+@keyframes fadeOutRight {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+.fadeOutRight {
+  -webkit-animation-name: fadeOutRight;
+  animation-name: fadeOutRight;
+}
+
+@-webkit-keyframes fadeOutRightBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+@keyframes fadeOutRightBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+.fadeOutRightBig {
+  -webkit-animation-name: fadeOutRightBig;
+  animation-name: fadeOutRightBig;
+}
+
+@-webkit-keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+@keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+.fadeOutUp {
+  -webkit-animation-name: fadeOutUp;
+  animation-name: fadeOutUp;
+}
+
+@-webkit-keyframes fadeOutUpBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+@keyframes fadeOutUpBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+.fadeOutUpBig {
+  -webkit-animation-name: fadeOutUpBig;
+  animation-name: fadeOutUpBig;
+}
+
+@-webkit-keyframes flip {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+    transform: perspective(400px) scale3d(.95, .95, .95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+@keyframes flip {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+    transform: perspective(400px) scale3d(.95, .95, .95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+.animated.flip {
+  -webkit-backface-visibility: visible;
+  backface-visibility: visible;
+  -webkit-animation-name: flip;
+  animation-name: flip;
+}
+
+@-webkit-keyframes flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@keyframes flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+.flipInX {
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipInX;
+  animation-name: flipInX;
+}
+
+@-webkit-keyframes flipInY {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@keyframes flipInY {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+.flipInY {
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipInY;
+  animation-name: flipInY;
+}
+
+@-webkit-keyframes flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+.flipOutX {
+  -webkit-animation-name: flipOutX;
+  animation-name: flipOutX;
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+}
+
+@-webkit-keyframes flipOutY {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutY {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+.flipOutY {
+  -webkit-backface-visibility: visible !important;
+  backface-visibility: visible !important;
+  -webkit-animation-name: flipOutY;
+  animation-name: flipOutY;
+}
+
+@-webkit-keyframes lightSpeedIn {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+    transform: translate3d(100%, 0, 0) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: skewX(20deg);
+    transform: skewX(20deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: skewX(-5deg);
+    transform: skewX(-5deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes lightSpeedIn {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+    transform: translate3d(100%, 0, 0) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: skewX(20deg);
+    transform: skewX(20deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: skewX(-5deg);
+    transform: skewX(-5deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.lightSpeedIn {
+  -webkit-animation-name: lightSpeedIn;
+  animation-name: lightSpeedIn;
+  -webkit-animation-timing-function: ease-out;
+  animation-timing-function: ease-out;
+}
+
+@-webkit-keyframes lightSpeedOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+    transform: translate3d(100%, 0, 0) skewX(30deg);
+    opacity: 0;
+  }
+}
+
+@keyframes lightSpeedOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+    transform: translate3d(100%, 0, 0) skewX(30deg);
+    opacity: 0;
+  }
+}
+
+.lightSpeedOut {
+  -webkit-animation-name: lightSpeedOut;
+  animation-name: lightSpeedOut;
+  -webkit-animation-timing-function: ease-in;
+  animation-timing-function: ease-in;
+}
+
+@-webkit-keyframes rotateIn {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, -200deg);
+    transform: rotate3d(0, 0, 1, -200deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateIn {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, -200deg);
+    transform: rotate3d(0, 0, 1, -200deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateIn {
+  -webkit-animation-name: rotateIn;
+  animation-name: rotateIn;
+}
+
+@-webkit-keyframes rotateInDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInDownLeft {
+  -webkit-animation-name: rotateInDownLeft;
+  animation-name: rotateInDownLeft;
+}
+
+@-webkit-keyframes rotateInDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInDownRight {
+  -webkit-animation-name: rotateInDownRight;
+  animation-name: rotateInDownRight;
+}
+
+@-webkit-keyframes rotateInUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInUpLeft {
+  -webkit-animation-name: rotateInUpLeft;
+  animation-name: rotateInUpLeft;
+}
+
+@-webkit-keyframes rotateInUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -90deg);
+    transform: rotate3d(0, 0, 1, -90deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -90deg);
+    transform: rotate3d(0, 0, 1, -90deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+.rotateInUpRight {
+  -webkit-animation-name: rotateInUpRight;
+  animation-name: rotateInUpRight;
+}
+
+@-webkit-keyframes rotateOut {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 200deg);
+    transform: rotate3d(0, 0, 1, 200deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOut {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 200deg);
+    transform: rotate3d(0, 0, 1, 200deg);
+    opacity: 0;
+  }
+}
+
+.rotateOut {
+  -webkit-animation-name: rotateOut;
+  animation-name: rotateOut;
+}
+
+@-webkit-keyframes rotateOutDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutDownLeft {
+  -webkit-animation-name: rotateOutDownLeft;
+  animation-name: rotateOutDownLeft;
+}
+
+@-webkit-keyframes rotateOutDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutDownRight {
+  -webkit-animation-name: rotateOutDownRight;
+  animation-name: rotateOutDownRight;
+}
+
+@-webkit-keyframes rotateOutUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutUpLeft {
+  -webkit-animation-name: rotateOutUpLeft;
+  animation-name: rotateOutUpLeft;
+}
+
+@-webkit-keyframes rotateOutUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 90deg);
+    transform: rotate3d(0, 0, 1, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 90deg);
+    transform: rotate3d(0, 0, 1, 90deg);
+    opacity: 0;
+  }
+}
+
+.rotateOutUpRight {
+  -webkit-animation-name: rotateOutUpRight;
+  animation-name: rotateOutUpRight;
+}
+
+@-webkit-keyframes hinge {
+  0% {
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate3d(0, 0, 1, 80deg);
+    transform: rotate3d(0, 0, 1, 80deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40%, 80% {
+    -webkit-transform: rotate3d(0, 0, 1, 60deg);
+    transform: rotate3d(0, 0, 1, 60deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 700px, 0);
+    transform: translate3d(0, 700px, 0);
+    opacity: 0;
+  }
+}
+
+@keyframes hinge {
+  0% {
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate3d(0, 0, 1, 80deg);
+    transform: rotate3d(0, 0, 1, 80deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40%, 80% {
+    -webkit-transform: rotate3d(0, 0, 1, 60deg);
+    transform: rotate3d(0, 0, 1, 60deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 700px, 0);
+    transform: translate3d(0, 700px, 0);
+    opacity: 0;
+  }
+}
+
+.hinge {
+  -webkit-animation-name: hinge;
+  animation-name: hinge;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollIn {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes rollIn {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+.rollIn {
+  -webkit-animation-name: rollIn;
+  animation-name: rollIn;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+  }
+}
+
+@keyframes rollOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+  }
+}
+
+.rollOut {
+  -webkit-animation-name: rollOut;
+  animation-name: rollOut;
+}
+
+@-webkit-keyframes zoomIn {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  50% {
+    opacity: 1;
+  }
+}
+
+@keyframes zoomIn {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  50% {
+    opacity: 1;
+  }
+}
+
+.zoomIn {
+  -webkit-animation-name: zoomIn;
+  animation-name: zoomIn;
+}
+
+@-webkit-keyframes zoomInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInDown {
+  -webkit-animation-name: zoomInDown;
+  animation-name: zoomInDown;
+}
+
+@-webkit-keyframes zoomInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInLeft {
+  -webkit-animation-name: zoomInLeft;
+  animation-name: zoomInLeft;
+}
+
+@-webkit-keyframes zoomInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInRight {
+  -webkit-animation-name: zoomInRight;
+  animation-name: zoomInRight;
+}
+
+@-webkit-keyframes zoomInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomInUp {
+  -webkit-animation-name: zoomInUp;
+  animation-name: zoomInUp;
+}
+
+@-webkit-keyframes zoomOut {
+  from {
+    opacity: 1;
+  }
+
+  50% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+@keyframes zoomOut {
+  from {
+    opacity: 1;
+  }
+
+  50% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+.zoomOut {
+  -webkit-animation-name: zoomOut;
+  animation-name: zoomOut;
+}
+
+@-webkit-keyframes zoomOutDown {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomOutDown {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomOutDown {
+  -webkit-animation-name: zoomOutDown;
+  animation-name: zoomOutDown;
+}
+
+@-webkit-keyframes zoomOutLeft {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+    transform: scale(.1) translate3d(-2000px, 0, 0);
+    -webkit-transform-origin: left center;
+    transform-origin: left center;
+  }
+}
+
+@keyframes zoomOutLeft {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+    transform: scale(.1) translate3d(-2000px, 0, 0);
+    -webkit-transform-origin: left center;
+    transform-origin: left center;
+  }
+}
+
+.zoomOutLeft {
+  -webkit-animation-name: zoomOutLeft;
+  animation-name: zoomOutLeft;
+}
+
+@-webkit-keyframes zoomOutRight {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+    transform: scale(.1) translate3d(2000px, 0, 0);
+    -webkit-transform-origin: right center;
+    transform-origin: right center;
+  }
+}
+
+@keyframes zoomOutRight {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+    transform: scale(.1) translate3d(2000px, 0, 0);
+    -webkit-transform-origin: right center;
+    transform-origin: right center;
+  }
+}
+
+.zoomOutRight {
+  -webkit-animation-name: zoomOutRight;
+  animation-name: zoomOutRight;
+}
+
+@-webkit-keyframes zoomOutUp {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomOutUp {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+.zoomOutUp {
+  -webkit-animation-name: zoomOutUp;
+  animation-name: zoomOutUp;
+}
+
+@-webkit-keyframes slideInDown {
+  from {
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInDown {
+  from {
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInDown {
+  -webkit-animation-name: slideInDown;
+  animation-name: slideInDown;
+}
+
+@-webkit-keyframes slideInLeft {
+  from {
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInLeft {
+  from {
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInLeft {
+  -webkit-animation-name: slideInLeft;
+  animation-name: slideInLeft;
+}
+
+@-webkit-keyframes slideInRight {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInRight {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInRight {
+  -webkit-animation-name: slideInRight;
+  animation-name: slideInRight;
+}
+
+@-webkit-keyframes slideInUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+.slideInUp {
+  -webkit-animation-name: slideInUp;
+  animation-name: slideInUp;
+}
+
+@-webkit-keyframes slideOutDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@keyframes slideOutDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+.slideOutDown {
+  -webkit-animation-name: slideOutDown;
+  animation-name: slideOutDown;
+}
+
+@-webkit-keyframes slideOutLeft {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+@keyframes slideOutLeft {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+.slideOutLeft {
+  -webkit-animation-name: slideOutLeft;
+  animation-name: slideOutLeft;
+}
+
+@-webkit-keyframes slideOutRight {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+@keyframes slideOutRight {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+.slideOutRight {
+  -webkit-animation-name: slideOutRight;
+  animation-name: slideOutRight;
+}
+
+@-webkit-keyframes slideOutUp {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+@keyframes slideOutUp {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+.slideOutUp {
+  -webkit-animation-name: slideOutUp;
+  animation-name: slideOutUp;
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/owl.carousel.css b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/owl.carousel.css
new file mode 100644
index 000000000..2a4338f07
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/owl.carousel.css
@@ -0,0 +1,553 @@
+.cms-page-view .product-item-info ,
+.cms-index-index .product-item-info{
+	width: inherit;
+}
+
+.products.products-grid,
+.custom-slider {
+	position: relative;
+	padding: 0 0 20px;
+}
+.extend_1,
+.owl-carousel .owl-controls .owl-nav .owl-prev,
+.owl-carousel .owl-controls .owl-nav .owl-next,
+.owl-carousel .owl-controls .owl-dot {
+	cursor: pointer;
+	cursor: hand;
+	user-select: none;
+}
+.owl-carousel {
+	display: none;
+	width: 100%;
+	position: relative;
+	z-index: 0;
+}
+.owl-carousel .animated {
+	animation-duration: 1000ms;
+	animation-fill-mode: both;
+}
+.owl-carousel .owl-animated-in {
+	z-index: 0;
+}
+.owl-carousel .owl-animated-out {
+	z-index: 1;
+}
+.owl-carousel .fadeOut {
+	animation-name: fadeOut;
+}
+.owl-carousel .owl-stage {
+	position: relative;
+}
+.owl-carousel .owl-stage:after {
+	content: ".";
+	display: block;
+	clear: both;
+	visibility: hidden;
+	line-height: 0;
+	height: 0;
+}
+.owl-carousel .owl-stage-outer {
+	position: relative;
+	overflow: hidden;
+	padding: 20px 0;
+}
+.owl-carousel.owl-loaded {
+	display: block;
+}
+.owl-carousel.owl-loading {
+	opacity: 0;
+	display: block;
+}
+.owl-carousel.owl-hidden {
+	opacity: 0;
+}
+.owl-carousel .owl-item {
+	position: relative;
+	min-height: 1px;
+	float: left;
+	user-select: none;
+}
+.owl-carousel .owl-item img {
+	display: block;
+	width: 100%;
+	transform-style: preserve-3d;
+}
+.owl-carousel .owl-item .owl-lazy {
+	/*opacity: 0;*/
+	transition: opacity 400ms ease;
+}
+.owl-carousel .owl-item .product-item {
+	width: 100% !important;
+}
+.owl-carousel .owl-grab {
+	cursor: move;
+	cursor: grab;
+}
+.owl-carousel.owl-rtl {
+	direction: rtl;
+}
+.owl-carousel.owl-rtl .owl-item {
+	float: right;
+}
+.owl-carousel .owl-video-wrapper {
+	position: relative;
+	height: 100%;
+	background: #000;
+}
+.owl-carousel .owl-video-play-icon {
+	position: absolute;
+	height: 80px;
+	width: 80px;
+	left: 50%;
+	top: 50%;
+	margin-left: -40px;
+	margin-top: -40px;
+	background: url(owl.video.play.png) no-repeat;
+	cursor: pointer;
+	z-index: 1;
+	transition: scale 100ms ease;
+}
+.owl-carousel .owl-video-play-icon:hover {
+	transition: scale(1.3, 1.3);
+}
+.owl-carousel .owl-video-playing .owl-video-tn {
+	display: none;
+}
+.owl-carousel .owl-video-playing .owl-video-play-icon {
+	display: none;
+}
+.owl-carousel .owl-video-tn {
+	opacity: 0;
+	height: 100%;
+	background-position: center center;
+	background-repeat: no-repeat;
+	background-size: contain;
+	transition: opacity 400ms ease;
+}
+.owl-carousel .owl-video-frame {
+	position: relative;
+	z-index: 1;
+}
+.owl-carousel .owl-refresh .owl-item {
+	display: none;
+}
+.owl-carousel.owl-text-select-on .owl-item {
+	user-select: auto;
+}
+.owl-carousel .banner-item .content_slider {
+	position: absolute;
+	top: 25%;
+	left: 50px;
+	width: calc(100% - 120px);
+	z-index: 1;
+	color: #fff;
+}
+.owl-carousel .banner-item .content_slider .banner-title {
+	width: 100%;
+	color: #fff;
+	font-size: 32px;
+	text-transform: uppercase;
+	text-align: center;
+	display: inline-block;
+	clear: both;
+}
+.owl-carousel .banner-item .content_slider .banner-description {
+	width: 100%;
+	clear: both;
+	display: inline-block;
+	text-align: center;
+	padding: 15px 0;
+}
+.owl-carousel .banner-item .content_slider .buttons {
+	width: 100%;
+	clear: both;
+	display: inline-block;
+	text-align: center;
+}
+.owl-carousel .banner-item .content_slider .buttons a.action.primary {
+	margin: 10px;
+}
+.owl-carousel .banner-item .content_slider .buttons .custom_content {
+	margin: 10px 0 0;
+	text-align: center;
+}
+@-webkit-keyframes fadeOut {
+	0% {
+		opacity: 1;
+	}
+	100% {
+		opacity: 0;
+	}
+}
+@keyframes fadeOut {
+	0% {
+		opacity: 1;
+	}
+	100% {
+		opacity: 0;
+	}
+}
+.owl-height {
+	transition: height 500ms ease-in-out;
+}
+.owl-theme .owl-controls {
+	text-align: center;
+	-webkit-tap-highlight-color: transparent;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-] {
+	color: #fff;
+	font-size: 14px;
+	margin: calc(-40px / 2) 0 0;
+	padding: 0;
+	background: rgba(255, 255, 255, 0.5);
+	display: inline-block;
+	cursor: pointer;
+	-webkit-border-radius: 3px;
+	-moz-border-radius: 3px;
+	border-radius: 3px;
+	position: absolute;
+	top: 50%;
+	width: 40px;
+	height: 40px;
+	text-indent: 100%;
+	overflow: hidden;
+}
+[class*=owl-carousel-products-].owl-theme .owl-controls .owl-nav [class*=owl-] {
+	background: transparent;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-].owl-prev {
+	left: 15px;
+}
+[class*=owl-carousel-products-].owl-theme .owl-controls .owl-nav [class*=owl-].owl-prev {
+	left: -55px;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-].owl-prev:before {
+	position: absolute;
+	top: 26px;
+	left: 8px;
+	z-index: 1;
+	width: 20px;
+	height: 1px;
+	content: "";
+	border-top: 2px solid #000;
+	transform: rotate(40deg);
+	border-radius: 20px;
+	text-indent: 0;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-].owl-prev:after {
+	position: absolute;
+	top: 14px;
+	left: 8px;
+	z-index: 1;
+	width: 20px;
+	height: 1px;
+	content: "";
+	border-top: 2px solid #000;
+	transform: rotate(-40deg);
+	border-radius: 20px;
+	text-indent: 0;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-].owl-next {
+	right: 15px;
+}
+[class*=owl-carousel-products-].owl-theme .owl-controls .owl-nav [class*=owl-].owl-next {
+	right: -55px;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-].owl-next:before {
+	position: absolute;
+	top: 14px;
+	right: 8px;
+	z-index: 1;
+	width: 20px;
+	height: 1px;
+	content: "";
+	border-top: 2px solid #000;
+	transform: rotate(40deg);
+	border-radius: 20px;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-].owl-next:after {
+	position: absolute;
+	top: 26px;
+	right: 8px;
+	z-index: 1;
+	width: 20px;
+	height: 1px;
+	content: "";
+	border-top: 2px solid #000;
+	transform: rotate(-40deg);
+	border-radius: 20px;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-]:hover {
+	background: #000000;
+	color: #fff;
+	text-decoration: none;
+}
+[class*=owl-carousel-products-].owl-theme .owl-controls .owl-nav [class*=owl-]:hover {
+	background: transparent;
+	color: #000000;
+}
+.owl-theme .owl-controls .owl-nav [class*=owl-]:hover:before,
+.owl-theme .owl-controls .owl-nav [class*=owl-]:hover:after {
+	border-color: #fff;
+}
+[class*=owl-carousel-products-].owl-theme .owl-controls .owl-nav [class*=owl-]:hover:before,
+[class*=owl-carousel-products-].owl-theme .owl-controls .owl-nav [class*=owl-]:hover:after {
+	border-color: #000000;
+}
+.owl-theme .owl-controls .owl-nav .disabled {
+	opacity: .5;
+	cursor: default;
+}
+.owl-theme .owl-dots {
+	position: absolute;
+	width: 100%;
+	bottom: 20px;
+}
+[class*=owl-carousel-products-].owl-theme .owl-dots {
+	position: relative;
+	bottom: -20px;
+}
+.owl-theme .owl-dots .owl-dot {
+	display: inline-block;
+	zoom: 1;
+	*display: inline;
+}
+.owl-theme .owl-dots .owl-dot span {
+	width: 10px;
+	height: 10px;
+	margin: 5px 7px;
+	background: #d6d6d6;
+	display: block;
+	-webkit-backface-visibility: visible;
+	-webkit-transition: opacity 200ms ease;
+	-moz-transition: opacity 200ms ease;
+	-ms-transition: opacity 200ms ease;
+	-o-transition: opacity 200ms ease;
+	transition: opacity 200ms ease;
+	-webkit-border-radius: 30px;
+	-moz-border-radius: 30px;
+	border-radius: 30px;
+}
+.owl-theme .owl-dots .owl-dot:hover span {
+	background: #000000;
+}
+.owl-theme .owl-dots .owl-dot.active span {
+	background: #000000;
+}
+.no-js .owl-carousel {
+	display: block;
+}
+#pre-div {
+	background-color: #fff;
+	bottom: 0;
+	height: 100%;
+	width: 100%;
+	left: 0;
+	position: absolute;
+	right: 0;
+	top: 0;
+	z-index: 10000;
+}
+.cssload-loader {
+	position: absolute;
+	left: calc(50% - 31px);
+	top: calc(50% - 31px);
+	width: 62px;
+	height: 62px;
+	border-radius: 50%;
+	-o-border-radius: 50%;
+	-ms-border-radius: 50%;
+	-webkit-border-radius: 50%;
+	-moz-border-radius: 50%;
+	perspective: 780px;
+}
+
+.cssload-inner {
+	position: absolute;
+	width: 100%;
+	height: 100%;
+	box-sizing: border-box;
+	-o-box-sizing: border-box;
+	-ms-box-sizing: border-box;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	border-radius: 50%;
+	-o-border-radius: 50%;
+	-ms-border-radius: 50%;
+	-webkit-border-radius: 50%;
+	-moz-border-radius: 50%;
+}
+
+.cssload-inner.cssload-one {
+	left: 0%;
+	top: 0%;
+	animation: cssload-rotate-one 1.15s linear infinite;
+	-o-animation: cssload-rotate-one 1.15s linear infinite;
+	-ms-animation: cssload-rotate-one 1.15s linear infinite;
+	-webkit-animation: cssload-rotate-one 1.15s linear infinite;
+	-moz-animation: cssload-rotate-one 1.15s linear infinite;
+	border-bottom: 3px solid rgb(0,0,0);
+}
+
+.cssload-inner.cssload-two {
+	right: 0%;
+	top: 0%;
+	animation: cssload-rotate-two 1.15s linear infinite;
+	-o-animation: cssload-rotate-two 1.15s linear infinite;
+	-ms-animation: cssload-rotate-two 1.15s linear infinite;
+	-webkit-animation: cssload-rotate-two 1.15s linear infinite;
+	-moz-animation: cssload-rotate-two 1.15s linear infinite;
+	border-right: 3px solid rgb(0,0,0);
+}
+
+.cssload-inner.cssload-three {
+	right: 0%;
+	bottom: 0%;
+	animation: cssload-rotate-three 1.15s linear infinite;
+	-o-animation: cssload-rotate-three 1.15s linear infinite;
+	-ms-animation: cssload-rotate-three 1.15s linear infinite;
+	-webkit-animation: cssload-rotate-three 1.15s linear infinite;
+	-moz-animation: cssload-rotate-three 1.15s linear infinite;
+	border-top: 3px solid rgb(0,0,0);
+}
+
+
+
+
+
+
+
+@keyframes cssload-rotate-one {
+	0% {
+		transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+	}
+	100% {
+		transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+	}
+}
+
+@-o-keyframes cssload-rotate-one {
+	0% {
+		-o-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+	}
+	100% {
+		-o-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+	}
+}
+
+@-ms-keyframes cssload-rotate-one {
+	0% {
+		-ms-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+	}
+	100% {
+		-ms-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+	}
+}
+
+@-webkit-keyframes cssload-rotate-one {
+	0% {
+		-webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+	}
+	100% {
+		-webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+	}
+}
+
+@-moz-keyframes cssload-rotate-one {
+	0% {
+		-moz-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+	}
+	100% {
+		-moz-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+	}
+}
+
+@keyframes cssload-rotate-two {
+	0% {
+		transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+	}
+	100% {
+		transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+	}
+}
+
+@-o-keyframes cssload-rotate-two {
+	0% {
+		-o-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+	}
+	100% {
+		-o-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+	}
+}
+
+@-ms-keyframes cssload-rotate-two {
+	0% {
+		-ms-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+	}
+	100% {
+		-ms-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+	}
+}
+
+@-webkit-keyframes cssload-rotate-two {
+	0% {
+		-webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+	}
+	100% {
+		-webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+	}
+}
+
+@-moz-keyframes cssload-rotate-two {
+	0% {
+		-moz-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+	}
+	100% {
+		-moz-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+	}
+}
+
+@keyframes cssload-rotate-three {
+	0% {
+		transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+	}
+	100% {
+		transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+	}
+}
+
+@-o-keyframes cssload-rotate-three {
+	0% {
+		-o-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+	}
+	100% {
+		-o-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+	}
+}
+
+@-ms-keyframes cssload-rotate-three {
+	0% {
+		-ms-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+	}
+	100% {
+		-ms-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+	}
+}
+
+@-webkit-keyframes cssload-rotate-three {
+	0% {
+		-webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+	}
+	100% {
+		-webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+	}
+}
+
+@-moz-keyframes cssload-rotate-three {
+	0% {
+		-moz-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+	}
+	100% {
+		-moz-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+	}
+}
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/owl.video.play.png b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/owl.video.play.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d0218d4665113fc6cbde7126edf9662cc56108e
GIT binary patch
literal 4976
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

literal 0
HcmV?d00001

diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_extend.less b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_extend.less
new file mode 100644
index 000000000..f003f5da1
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_extend.less
@@ -0,0 +1,32 @@
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
+	.columns {
+		display: block;
+		.column.main {
+			width: 100%;
+		}
+	}
+	.owl-carousel {
+		.owl-item {
+			.product-item {
+				.product-item-info {
+					background: none transparent !important;
+					box-shadow: none;
+					-o-box-shadow: none;
+					-ms-box-shadow: none;
+					-moz-box-shadow: none;
+					-webkit-box-shadow: none;
+				}
+			}
+		}
+	}
+}
+
+.clearfix {
+	*zoom: 1;
+	&:after {
+		content: '';
+		display: block;
+		clear: both;
+		height: 0;
+	}
+}
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_module.less b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_module.less
new file mode 100644
index 000000000..a45760d29
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/css/source/_module.less
@@ -0,0 +1,679 @@
+//colors
+@black: #000;
+@white: #fff;
+@color_iron_approx: #d6d6d6;
+@color_mantle_approx: #869791;
+@dot_active: @black;
+@dot_border_active: 1px solid @black;
+//urls
+@url_0: url(owl.video.play.png);
+
+//@extend-elements
+//original selectors
+//.owl-carousel .owl-controls .owl-nav .owl-prev, .owl-carousel .owl-controls .owl-nav .owl-next, .owl-carousel .owl-controls .owl-dot
+.extend_1 {
+	cursor: pointer;
+	cursor: hand;
+	//Instead of the line below you could use @include user-select(@select)
+	user-select: none;
+}
+
+.products.products-grid,
+.custom-slider {
+	position: relative;
+	padding: 0 0 20px;
+}
+
+.owl-carousel.products {
+	display: none;
+	width: 100%;
+	position: relative;
+	z-index: 0;
+	.animated {
+		animation-duration: 1000ms;
+		animation-fill-mode: both;
+	}
+	.owl-animated-in {
+		z-index: 0;
+	}
+	.owl-animated-out {
+		z-index: 1;
+	}
+	.fadeOut {
+		animation-name: fadeOut;
+	}
+	.owl-stage {
+		position: relative;
+		&:after {
+			content: ".";
+			display: block;
+			clear: both;
+			visibility: hidden;
+			line-height: 0;
+			height: 0;
+		}
+	}
+	.owl-stage-outer {
+		position: relative;
+		overflow: hidden;
+		padding: 20px 0;
+	}
+	.owl-controls {
+		@size: 40px;
+		.owl-nav {
+			.owl-prev {
+				&:extend(.extend_1);
+			}
+			.owl-next {
+				&:extend(.extend_1);
+			}
+			&.fullscreen {
+				.owl-prev {
+					:root .catalog-product-view & {
+						width: @size !important;
+						top: 0 !important;
+						left: 0 !important;
+						background: none transparent !important;
+						&:hover {
+							background: none transparent !important;
+						}
+					}
+				}
+				.owl-next {
+					:root .catalog-product-view & {
+						width: @size !important;
+						top: 0 !important;
+						right: 0 !important;
+						background: none transparent !important;
+						&:hover {
+							background: none transparent !important;
+						}
+					}
+				}
+			}
+		}
+		.owl-dot {
+			&:extend(.extend_1);
+		}
+	}
+	&.owl-loaded {
+		display: block;
+	}
+	&.owl-loading {
+		opacity: 0;
+		display: block;
+	}
+	&.owl-hidden {
+		opacity: 0;
+	}
+	.owl-item {
+		position: relative;
+		min-height: 1px;
+		float: left;
+		//Instead of the line below you could use @include user-select(@select)
+		user-select: none;
+		img {
+			display: block;
+			width: 100%;
+			//Instead of the line below you could use @include transform-style(@style)
+			transform-style: preserve-3d;
+		}
+		.owl-lazy {
+			opacity: 0;
+			//Instead of the line below you could use @include transition(@transition-1, @transition-2, @transition-3, @transition-4, @transition-5, @transition-6, @transition-7, @transition-8, @transition-9, @transition-10)
+			transition: opacity 400ms ease;
+		}
+		.product-item {
+			width: 100% !important;
+			.product-item-info {
+			}
+		}
+	}
+	.owl-grab {
+		cursor: move;
+		cursor: grab;
+	}
+	&.owl-rtl {
+		direction: rtl;
+		.owl-item {
+			float: right;
+		}
+	}
+	.owl-video-wrapper {
+		position: relative;
+		height: 100%;
+		background: @black;
+	}
+	.owl-video-play-icon {
+		position: absolute;
+		height: 80px;
+		width: 80px;
+		left: 50%;
+		top: 50%;
+		margin-left: -40px;
+		margin-top: -40px;
+		background: @url_0 no-repeat;
+		cursor: pointer;
+		z-index: 1;
+		//Instead of the line below you could use @include transition(@transition-1, @transition-2, @transition-3, @transition-4, @transition-5, @transition-6, @transition-7, @transition-8, @transition-9, @transition-10)
+		transition: scale 100ms ease;
+		&:hover {
+			//Instead of the line below you could use @include transition(@transition-1, @transition-2, @transition-3, @transition-4, @transition-5, @transition-6, @transition-7, @transition-8, @transition-9, @transition-10)
+			transition: scale(1.3, 1.3);
+		}
+	}
+	.owl-video-playing {
+		.owl-video-tn {
+			display: none;
+		}
+		.owl-video-play-icon {
+			display: none;
+		}
+	}
+	.owl-video-tn {
+		opacity: 0;
+		height: 100%;
+		background-position: center center;
+		background-repeat: no-repeat;
+		background-size: contain;
+		//Instead of the line below you could use @include transition(@transition-1, @transition-2, @transition-3, @transition-4, @transition-5, @transition-6, @transition-7, @transition-8, @transition-9, @transition-10)
+		transition: opacity 400ms ease;
+	}
+	.owl-video-frame {
+		position: relative;
+		z-index: 1;
+	}
+	.owl-refresh .owl-item {
+		display: none;
+	}
+	&.owl-text-select-on .owl-item {
+		//Instead of the line below you could use @include user-select(@select)
+		user-select: auto;
+	}
+	.banner-item {
+		.content_slider {
+			position: absolute;
+			top: 25%;
+			left: 50px;
+			width: calc(~"100% - 120px");
+			z-index: 1;
+			color: @white;
+			.banner-title {
+				//position: absolute;
+				//top: 25%;
+				//left: 0;
+				width: 100%;
+				//z-index: 1;
+				color: @white;
+				font-size: 32px;
+				text-transform: uppercase;
+				text-align: center;
+				display: inline-block;
+				clear: both;
+			}
+			.banner-description {
+				width: 100%;
+				clear: both;
+				display: inline-block;
+				text-align: center;
+				padding: 15px 0;
+			}
+			.buttons {
+				width: 100%;
+				clear: both;
+				display: inline-block;
+				text-align: center;
+				a {
+					&.action.primary {
+						margin: 10px;
+					}
+				}
+				.custom_content {
+					margin: 10px 0 0;
+					text-align: center;
+				}
+			}
+		}
+
+	}
+	.product-item-details {
+		float: left;
+		width: 100%;
+	}
+}
+
+@-webkit-keyframes fadeOut {
+	0% {
+		opacity: 1;
+	}
+	100% {
+		opacity: 0;
+	}
+}
+
+@keyframes fadeOut {
+	0% {
+		opacity: 1;
+	}
+	100% {
+		opacity: 0;
+	}
+}
+
+.owl-height {
+	//Instead of the line below you could use @include transition(@transition-1, @transition-2, @transition-3, @transition-4, @transition-5, @transition-6, @transition-7, @transition-8, @transition-9, @transition-10)
+	transition: height 500ms ease-in-out;
+}
+.owl-theme.owl-carousel {
+	.owl-controls {
+		.owl-dot {
+			display: inline-block;
+			zoom: 1;
+			*display: inline;
+			span {
+				width: 10px;
+				height: 10px;
+				margin: 5px 7px;
+				border:1px solid #d6d6d6;
+				background: white;
+				display: block;
+				-webkit-backface-visibility: visible;
+				-webkit-transition: opacity 200ms ease;
+				-moz-transition: opacity 200ms ease;
+				-ms-transition: opacity 200ms ease;
+				-o-transition: opacity 200ms ease;
+				transition: opacity 200ms ease;
+				-webkit-border-radius: 30px;
+				-moz-border-radius: 30px;
+				border-radius: 30px;
+			}
+			&:hover {
+				span {
+					background: @dot_active;
+				}
+			}
+		}
+		.owl-dot.active {
+			span {
+				background: @dot_active;
+				border: @dot_border_active;
+			}
+		}
+	}
+}
+
+.owl-theme {
+	.owl-controls {
+		//margin-top: 10px;
+		text-align: center;
+		-webkit-tap-highlight-color: transparent;
+		.owl-nav {
+			// [class*=owl-carousel-products-]
+			@size: 40px;
+			[class*=owl-] {
+				color: @white;
+				font-size: 14px;
+				margin: calc(~"-@size / 2") 0 0;
+				padding: 0;
+				background: rgba(255, 255, 255, .5);
+				display: inline-block;
+				cursor: pointer;
+				-webkit-border-radius: 3px;
+				-moz-border-radius: 3px;
+				border-radius: 3px;
+				position: absolute;
+				top: 50%;
+				width: 40px;
+				height: 40px;
+				text-indent: 100%;
+				overflow: hidden;
+
+				[class*=owl-carousel-products-] & {
+					background: transparent;
+				}
+				&.owl-prev {
+					left: 15px;
+					[class*=owl-carousel-products-] & {
+						left: -55px;
+					}
+					&:before {
+						position: absolute;
+						top: 26px;
+						left: 8px;
+						z-index: 1;
+						width: 20px;
+						height: 1px;
+						content: "";
+						border-top: 2px solid @black;
+						transform: rotate(40deg);
+						border-radius: 20px;
+						text-indent: 0;
+					}
+					&:after {
+						position: absolute;
+						top: 14px;
+						left: 8px;
+						z-index: 1;
+						width: 20px;
+						height: 1px;
+						content: "";
+						border-top: 2px solid @black;
+						transform: rotate(-40deg);
+						border-radius: 20px;
+						text-indent: 0;
+					}
+				}
+				&.owl-next {
+					right: 15px;
+					[class*=owl-carousel-products-] & {
+						right: -55px;
+					}
+					&:before {
+						position: absolute;
+						top: 14px;
+						right: 8px;
+						z-index: 1;
+						width: 20px;
+						height: 1px;
+						content: "";
+						border-top: 2px solid @black;
+						transform: rotate(40deg);
+						border-radius: 20px;
+					}
+					&:after {
+						position: absolute;
+						top: 26px;
+						right: 8px;
+						z-index: 1;
+						width: 20px;
+						height: 1px;
+						content: "";
+						border-top: 2px solid @black;
+						transform: rotate(-40deg);
+						border-radius: 20px;
+					}
+				}
+				&:hover {
+					background: @dot_active;
+					color: @white;
+					text-decoration: none;
+					[class*=owl-carousel-products-] & {
+						background: transparent;
+						color: @dot_active;
+					}
+					&:before,
+					&:after {
+						border-color: @white;
+						[class*=owl-carousel-products-] & {
+							border-color: @dot_active;
+						}
+					}
+				}
+			}
+			.disabled {
+				opacity: .5;
+				cursor: default;
+			}
+		}
+	}
+	.owl-dots {
+		position: absolute;
+		width: 100%;
+		bottom: 20px;
+		[class*=owl-carousel-products-] & {
+			position: relative;
+			bottom: -20px;
+		}
+	}
+}
+
+
+
+.no-js .owl-carousel {
+	display: block;
+}
+
+#pre-div {
+	background-color: @white;
+	bottom: 0;
+	height: 100%;
+	width: 100%;
+	left: 0;
+	position: absolute;
+	right: 0;
+	top: 0;
+	z-index: 10000;
+	.cssload-loader {
+		position: relative;
+		left: calc(~"50% - 31px");
+		top: calc(~"50% - 31px");
+		width: 62px;
+		height: 62px;
+		border-radius: 50%;
+		-o-border-radius: 50%;
+		-ms-border-radius: 50%;
+		-webkit-border-radius: 50%;
+		-moz-border-radius: 50%;
+		perspective: 780px;
+	}
+
+	.cssload-inner {
+		position: absolute;
+		width: 100%;
+		height: 100%;
+		box-sizing: border-box;
+		-o-box-sizing: border-box;
+		-ms-box-sizing: border-box;
+		-webkit-box-sizing: border-box;
+		-moz-box-sizing: border-box;
+		border-radius: 50%;
+		-o-border-radius: 50%;
+		-ms-border-radius: 50%;
+		-webkit-border-radius: 50%;
+		-moz-border-radius: 50%;
+	}
+
+	.cssload-inner.cssload-one {
+		left: 0%;
+		top: 0%;
+		animation: cssload-rotate-one 1.15s linear infinite;
+		-o-animation: cssload-rotate-one 1.15s linear infinite;
+		-ms-animation: cssload-rotate-one 1.15s linear infinite;
+		-webkit-animation: cssload-rotate-one 1.15s linear infinite;
+		-moz-animation: cssload-rotate-one 1.15s linear infinite;
+		border-bottom: 3px solid rgb(0, 0, 0);
+	}
+
+	.cssload-inner.cssload-two {
+		right: 0%;
+		top: 0%;
+		animation: cssload-rotate-two 1.15s linear infinite;
+		-o-animation: cssload-rotate-two 1.15s linear infinite;
+		-ms-animation: cssload-rotate-two 1.15s linear infinite;
+		-webkit-animation: cssload-rotate-two 1.15s linear infinite;
+		-moz-animation: cssload-rotate-two 1.15s linear infinite;
+		border-right: 3px solid rgb(0, 0, 0);
+	}
+
+	.cssload-inner.cssload-three {
+		right: 0%;
+		bottom: 0%;
+		animation: cssload-rotate-three 1.15s linear infinite;
+		-o-animation: cssload-rotate-three 1.15s linear infinite;
+		-ms-animation: cssload-rotate-three 1.15s linear infinite;
+		-webkit-animation: cssload-rotate-three 1.15s linear infinite;
+		-moz-animation: cssload-rotate-three 1.15s linear infinite;
+		border-top: 3px solid rgb(0, 0, 0);
+	}
+
+	.catalog-product-view .product-items .product-item-actions .actions-secondary {
+		display: inline-block !important;
+	}
+	.catalog-product-view .product-items .product-item-actions .action.tocompare {
+		position: absolute !important;
+		right: 0 !important;
+	}
+	.catalog-product-view .product-items .product-item-actions .action.towishlist {
+		position: absolute !important;
+		left: 0 !important;
+	}
+
+	@keyframes cssload-rotate-one {
+		0% {
+			transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+		}
+		100% {
+			transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+		}
+	}
+
+	@-o-keyframes cssload-rotate-one {
+		0% {
+			-o-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+		}
+		100% {
+			-o-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+		}
+	}
+
+	@-ms-keyframes cssload-rotate-one {
+		0% {
+			-ms-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+		}
+		100% {
+			-ms-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+		}
+	}
+
+	@-webkit-keyframes cssload-rotate-one {
+		0% {
+			-webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+		}
+		100% {
+			-webkit-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+		}
+	}
+
+	@-moz-keyframes cssload-rotate-one {
+		0% {
+			-moz-transform: rotateX(35deg) rotateY(-45deg) rotateZ(0deg);
+		}
+		100% {
+			-moz-transform: rotateX(35deg) rotateY(-45deg) rotateZ(360deg);
+		}
+	}
+
+	@keyframes cssload-rotate-two {
+		0% {
+			transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+		}
+		100% {
+			transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+		}
+	}
+
+	@-o-keyframes cssload-rotate-two {
+		0% {
+			-o-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+		}
+		100% {
+			-o-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+		}
+	}
+
+	@-ms-keyframes cssload-rotate-two {
+		0% {
+			-ms-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+		}
+		100% {
+			-ms-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+		}
+	}
+
+	@-webkit-keyframes cssload-rotate-two {
+		0% {
+			-webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+		}
+		100% {
+			-webkit-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+		}
+	}
+
+	@-moz-keyframes cssload-rotate-two {
+		0% {
+			-moz-transform: rotateX(50deg) rotateY(10deg) rotateZ(0deg);
+		}
+		100% {
+			-moz-transform: rotateX(50deg) rotateY(10deg) rotateZ(360deg);
+		}
+	}
+
+	@keyframes cssload-rotate-three {
+		0% {
+			transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+		}
+		100% {
+			transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+		}
+	}
+
+	@-o-keyframes cssload-rotate-three {
+		0% {
+			-o-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+		}
+		100% {
+			-o-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+		}
+	}
+
+	@-ms-keyframes cssload-rotate-three {
+		0% {
+			-ms-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+		}
+		100% {
+			-ms-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+		}
+	}
+
+	@-webkit-keyframes cssload-rotate-three {
+		0% {
+			-webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+		}
+		100% {
+			-webkit-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+		}
+	}
+
+	@-moz-keyframes cssload-rotate-three {
+		0% {
+			-moz-transform: rotateX(35deg) rotateY(55deg) rotateZ(0deg);
+		}
+		100% {
+			-moz-transform: rotateX(35deg) rotateY(55deg) rotateZ(360deg);
+		}
+	}
+}
+
+.catalog-product-view {
+	.column.main {
+		.block-content.content .block-actions {
+			.action.select {
+				margin-left: 10px;
+			}
+		}
+		.products-grid.products-related .product-item .product-item-info .product-item-details .field.choice.related {
+			width: 80px;
+			margin: 0 auto;
+			float: none;
+			position: static;
+		}
+	}
+}
+
+.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m){
+	.block-margin{
+		&.row{
+			margin-right: -15px !important;
+		}
+	}
+}
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.carousel.js b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.carousel.js
new file mode 100644
index 000000000..f5fb5c757
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.carousel.js
@@ -0,0 +1,3074 @@
+/**
+ * Owl carousel
+ * @version 2.0.0
+ * @author Bartosz Wojciechowski
+ * @license The MIT License (MIT)
+ * @todo Lazy Load Icon
+ * @todo prevent animationend bubling
+ * @todo itemsScaleUp
+ * @todo Test Zepto
+ * @todo stagePadding calculate wrong active classes
+ */
+define(["jquery"], // Require jquery
+	function($){
+		;(function($, window, document, undefined) {
+
+			var drag, state, e;
+
+			/**
+			 * Template for status information about drag and touch events.
+			 * @private
+			 */
+			drag = {
+				start: 0,
+				startX: 0,
+				startY: 0,
+				current: 0,
+				currentX: 0,
+				currentY: 0,
+				offsetX: 0,
+				offsetY: 0,
+				distance: null,
+				startTime: 0,
+				endTime: 0,
+				updatedX: 0,
+				targetEl: null
+			};
+
+			/**
+			 * Template for some status informations.
+			 * @private
+			 */
+			state = {
+				isTouch: false,
+				isScrolling: false,
+				isSwiping: false,
+				direction: false,
+				inMotion: false
+			};
+
+			/**
+			 * Event functions references.
+			 * @private
+			 */
+			e = {
+				_onDragStart: null,
+				_onDragMove: null,
+				_onDragEnd: null,
+				_transitionEnd: null,
+				_resizer: null,
+				_responsiveCall: null,
+				_goToLoop: null,
+				_checkVisibile: null
+			};
+
+			/**
+			 * Creates a carousel.
+			 * @class The Owl Carousel.
+			 * @public
+			 * @param {HTMLElement|jQuery} element - The element to create the carousel for.
+			 * @param {Object} [options] - The options
+			 */
+			function Owl(element, options) {
+
+				/**
+				 * Current settings for the carousel.
+				 * @public
+				 */
+				this.settings = null;
+
+				/**
+				 * Current options set by the caller including defaults.
+				 * @public
+				 */
+				this.options = $.extend({}, Owl.Defaults, options);
+
+				/**
+				 * Plugin element.
+				 * @public
+				 */
+				this.$element = $(element);
+
+				/**
+				 * Caches informations about drag and touch events.
+				 */
+				this.drag = $.extend({}, drag);
+
+				/**
+				 * Caches some status informations.
+				 * @protected
+				 */
+				this.state = $.extend({}, state);
+
+				/**
+				 * @protected
+				 * @todo Must be documented
+				 */
+				this.e = $.extend({}, e);
+
+				/**
+				 * References to the running plugins of this carousel.
+				 * @protected
+				 */
+				this._plugins = {};
+
+				/**
+				 * Currently suppressed events to prevent them from beeing retriggered.
+				 * @protected
+				 */
+				this._supress = {};
+
+				/**
+				 * Absolute current position.
+				 * @protected
+				 */
+				this._current = null;
+
+				/**
+				 * Animation speed in milliseconds.
+				 * @protected
+				 */
+				this._speed = null;
+
+				/**
+				 * Coordinates of all items in pixel.
+				 * @todo The name of this member is missleading.
+				 * @protected
+				 */
+				this._coordinates = [];
+
+				/**
+				 * Current breakpoint.
+				 * @todo Real media queries would be nice.
+				 * @protected
+				 */
+				this._breakpoint = null;
+
+				/**
+				 * Current width of the plugin element.
+				 */
+				this._width = null;
+
+				/**
+				 * All real items.
+				 * @protected
+				 */
+				this._items = [];
+
+				/**
+				 * All cloned items.
+				 * @protected
+				 */
+				this._clones = [];
+
+				/**
+				 * Merge values of all items.
+				 * @todo Maybe this could be part of a plugin.
+				 * @protected
+				 */
+				this._mergers = [];
+
+				/**
+				 * Invalidated parts within the update process.
+				 * @protected
+				 */
+				this._invalidated = {};
+
+				/**
+				 * Ordered list of workers for the update process.
+				 * @protected
+				 */
+				this._pipe = [];
+
+				$.each(Owl.Plugins, $.proxy(function(key, plugin) {
+					this._plugins[key[0].toLowerCase() + key.slice(1)]
+						= new plugin(this);
+				}, this));
+
+				$.each(Owl.Pipe, $.proxy(function(priority, worker) {
+					this._pipe.push({
+						'filter': worker.filter,
+						'run': $.proxy(worker.run, this)
+					});
+				}, this));
+
+				this.setup();
+				this.initialize();
+			}
+
+			/**
+			 * Default options for the carousel.
+			 * @public
+			 */
+			Owl.Defaults = {
+				items: 3,
+				loop: false,
+				center: false,
+
+				mouseDrag: true,
+				touchDrag: true,
+				pullDrag: true,
+				freeDrag: false,
+
+				margin: 0,
+				stagePadding: 0,
+
+				merge: false,
+				mergeFit: true,
+				autoWidth: false,
+
+				startPosition: 0,
+				rtl: false,
+
+				smartSpeed: 250,
+				fluidSpeed: false,
+				dragEndSpeed: false,
+
+				responsive: {},
+				responsiveRefreshRate: 200,
+				responsiveBaseElement: window,
+				responsiveClass: false,
+
+				fallbackEasing: 'swing',
+
+				info: false,
+
+				nestedItemSelector: false,
+				itemElement: 'div',
+				stageElement: 'div',
+
+				// Classes and Names
+				themeClass: 'owl-theme',
+				baseClass: 'owl-carousel',
+				itemClass: 'owl-item',
+				centerClass: 'center',
+				activeClass: 'active'
+			};
+
+			/**
+			 * Enumeration for width.
+			 * @public
+			 * @readonly
+			 * @enum {String}
+			 */
+			Owl.Width = {
+				Default: 'default',
+				Inner: 'inner',
+				Outer: 'outer'
+			};
+
+			/**
+			 * Contains all registered plugins.
+			 * @public
+			 */
+			Owl.Plugins = {};
+
+			/**
+			 * Update pipe.
+			 */
+			Owl.Pipe = [ {
+				filter: [ 'width', 'items', 'settings' ],
+				run: function(cache) {
+					cache.current = this._items && this._items[this.relative(this._current)];
+				}
+			}, {
+				filter: [ 'items', 'settings' ],
+				run: function() {
+					var cached = this._clones,
+						clones = this.$stage.children('.cloned');
+
+					if (clones.length !== cached.length || (!this.settings.loop && cached.length > 0)) {
+						this.$stage.children('.cloned').remove();
+						this._clones = [];
+					}
+				}
+			}, {
+				filter: [ 'items', 'settings' ],
+				run: function() {
+					var i, n,
+						clones = this._clones,
+						items = this._items,
+					// delta = this.settings.loop ? clones.length - Math.max(this.settings.items * 2, 4) : 0;
+						delta = this.settings.loop ? clones.length - Math.max(this.settings.items * 2, 3) : 0;
+
+					// for (i = 0, n = Math.abs(delta / 2); i < n; i++) {
+					for (i = 0, n = Math.floor(Math.abs(delta / 2)); i < n; i++) {
+						if (delta > 0) {
+							this.$stage.children().eq(items.length + clones.length - 1).remove();
+							clones.pop();
+							this.$stage.children().eq(0).remove();
+							clones.pop();
+						} else {
+							clones.push(clones.length / 2);
+							this.$stage.append(items[clones[clones.length - 1]].clone().addClass('cloned'));
+							clones.push(items.length - 1 - (clones.length - 1) / 2);
+							this.$stage.prepend(items[clones[clones.length - 1]].clone().addClass('cloned'));
+						}
+					}
+				}
+			}, {
+				filter: [ 'width', 'items', 'settings' ],
+				run: function() {
+					var rtl = (this.settings.rtl ? 1 : -1),
+						width = (this.width() / this.settings.items).toFixed(3),
+						coordinate = 0, merge, i, n;
+
+					this._coordinates = [];
+					for (i = 0, n = this._clones.length + this._items.length; i < n; i++) {
+						merge = this._mergers[this.relative(i)];
+						merge = (this.settings.mergeFit && Math.min(merge, this.settings.items)) || merge;
+						coordinate += (this.settings.autoWidth ? this._items[this.relative(i)].width() + this.settings.margin : width * merge) * rtl;
+
+						this._coordinates.push(coordinate);
+					}
+				}
+			}, {
+				filter: [ 'width', 'items', 'settings' ],
+				run: function() {
+					var i, n, width = (this.width() / this.settings.items).toFixed(3), css = {
+						'width': Math.abs(this._coordinates[this._coordinates.length - 1]) + this.settings.stagePadding * 2,
+						'padding-left': this.settings.stagePadding || '',
+						'padding-right': this.settings.stagePadding || ''
+					};
+
+					this.$stage.css(css);
+
+					css = { 'width': this.settings.autoWidth ? 'auto' : width - this.settings.margin };
+					css[this.settings.rtl ? 'margin-left' : 'margin-right'] = this.settings.margin;
+
+					if (!this.settings.autoWidth && $.grep(this._mergers, function(v) { return v > 1 }).length > 0) {
+						for (i = 0, n = this._coordinates.length; i < n; i++) {
+							css.width = Math.abs(this._coordinates[i]) - Math.abs(this._coordinates[i - 1] || 0) - this.settings.margin;
+							this.$stage.children().eq(i).css(css);
+						}
+					} else {
+						this.$stage.children().css(css);
+					}
+				}
+			}, {
+				filter: [ 'width', 'items', 'settings' ],
+				run: function(cache) {
+					cache.current && this.reset(this.$stage.children().index(cache.current));
+				}
+			}, {
+				filter: [ 'position' ],
+				run: function() {
+					this.animate(this.coordinates(this._current));
+				}
+			}, {
+				filter: [ 'width', 'position', 'items', 'settings' ],
+				run: function() {
+					var rtl = this.settings.rtl ? 1 : -1,
+						padding = this.settings.stagePadding * 2,
+						begin = this.coordinates(this.current()) + padding,
+						end = begin + this.width() * rtl,
+						inner, outer, matches = [], i, n;
+
+					for (i = 0, n = this._coordinates.length; i < n; i++) {
+						inner = this._coordinates[i - 1] || 0;
+						outer = Math.abs(this._coordinates[i]) + padding * rtl;
+
+						if ((this.op(inner, '<=', begin) && (this.op(inner, '>', end)))
+							|| (this.op(outer, '<', begin) && this.op(outer, '>', end))) {
+							matches.push(i);
+						}
+					}
+
+					this.$stage.children('.' + this.settings.activeClass).removeClass(this.settings.activeClass);
+					this.$stage.children(':eq(' + matches.join('), :eq(') + ')').addClass(this.settings.activeClass);
+
+					if (this.settings.center) {
+						this.$stage.children('.' + this.settings.centerClass).removeClass(this.settings.centerClass);
+						this.$stage.children().eq(this.current()).addClass(this.settings.centerClass);
+					}
+				}
+			} ];
+
+			/**
+			 * Initializes the carousel.
+			 * @protected
+			 */
+			Owl.prototype.initialize = function() {
+				this.trigger('initialize');
+
+				this.$element
+					.addClass(this.settings.baseClass)
+					.addClass(this.settings.themeClass)
+					.toggleClass('owl-rtl', this.settings.rtl);
+
+				// check support
+				this.browserSupport();
+
+				if (this.settings.autoWidth && this.state.imagesLoaded !== true) {
+					var imgs, nestedSelector, width;
+					imgs = this.$element.find('img');
+					nestedSelector = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : undefined;
+					width = this.$element.children(nestedSelector).width();
+
+					if (imgs.length && width <= 0) {
+						this.preloadAutoWidthImages(imgs);
+						return false;
+					}
+				}
+
+				this.$element.addClass('owl-loading');
+
+				// create stage
+				this.$stage = $('<' + this.settings.stageElement + ' class="owl-stage"/>')
+					.wrap('<div class="owl-stage-outer">');
+
+				// append stage
+				this.$element.append(this.$stage.parent());
+
+				// append content
+				this.replace(this.$element.children().not(this.$stage.parent()));
+
+				// set view width
+				this._width = this.$element.width();
+
+				// update view
+				this.refresh();
+
+				this.$element.removeClass('owl-loading').addClass('owl-loaded');
+
+				// attach generic events
+				this.eventsCall();
+
+				// attach generic events
+				this.internalEvents();
+
+				// attach custom control events
+				this.addTriggerableEvents();
+
+				this.trigger('initialized');
+			};
+
+			/**
+			 * Setups the current settings.
+			 * @todo Remove responsive classes. Why should adaptive designs be brought into IE8?
+			 * @todo Support for media queries by using `matchMedia` would be nice.
+			 * @public
+			 */
+			Owl.prototype.setup = function() {
+				var viewport = this.viewport(),
+					overwrites = this.options.responsive,
+					match = -1,
+					settings = null;
+
+				if (!overwrites) {
+					settings = $.extend({}, this.options);
+				} else {
+					$.each(overwrites, function(breakpoint) {
+						if (breakpoint <= viewport && breakpoint > match) {
+							match = Number(breakpoint);
+						}
+					});
+
+					settings = $.extend({}, this.options, overwrites[match]);
+					delete settings.responsive;
+
+					// responsive class
+					if (settings.responsiveClass) {
+						this.$element.attr('class', function(i, c) {
+							return c.replace(/\b owl-responsive-\S+/g, '');
+						}).addClass('owl-responsive-' + match);
+					}
+				}
+
+				if (this.settings === null || this._breakpoint !== match) {
+					this.trigger('change', { property: { name: 'settings', value: settings } });
+					this._breakpoint = match;
+					this.settings = settings;
+					this.invalidate('settings');
+					this.trigger('changed', { property: { name: 'settings', value: this.settings } });
+				}
+			};
+
+			/**
+			 * Updates option logic if necessery.
+			 * @protected
+			 */
+			Owl.prototype.optionsLogic = function() {
+				// Toggle Center class
+				this.$element.toggleClass('owl-center', this.settings.center);
+
+				// if items number is less than in body
+				if (this.settings.loop && this._items.length < this.settings.items) {
+					this.settings.loop = false;
+				}
+
+				if (this.settings.autoWidth) {
+					this.settings.stagePadding = false;
+					this.settings.merge = false;
+				}
+			};
+
+			/**
+			 * Prepares an item before add.
+			 * @todo Rename event parameter `content` to `item`.
+			 * @protected
+			 * @returns {jQuery|HTMLElement} - The item container.
+			 */
+			Owl.prototype.prepare = function(item) {
+				var event = this.trigger('prepare', { content: item });
+
+				if (!event.data) {
+					event.data = $('<' + this.settings.itemElement + '/>')
+						.addClass(this.settings.itemClass).append(item)
+				}
+
+				this.trigger('prepared', { content: event.data });
+
+				return event.data;
+			};
+
+			/**
+			 * Updates the view.
+			 * @public
+			 */
+			Owl.prototype.update = function() {
+				var i = 0,
+					n = this._pipe.length,
+					filter = $.proxy(function(p) { return this[p] }, this._invalidated),
+					cache = {};
+
+				while (i < n) {
+					if (this._invalidated.all || $.grep(this._pipe[i].filter, filter).length > 0) {
+						this._pipe[i].run(cache);
+					}
+					i++;
+				}
+
+				this._invalidated = {};
+			};
+
+			/**
+			 * Gets the width of the view.
+			 * @public
+			 * @param {Owl.Width} [dimension=Owl.Width.Default] - The dimension to return.
+			 * @returns {Number} - The width of the view in pixel.
+			 */
+			Owl.prototype.width = function(dimension) {
+				dimension = dimension || Owl.Width.Default;
+				switch (dimension) {
+					case Owl.Width.Inner:
+					case Owl.Width.Outer:
+						return this._width;
+					default:
+						return this._width - this.settings.stagePadding * 2 + this.settings.margin;
+				}
+			};
+
+			/**
+			 * Refreshes the carousel primarily for adaptive purposes.
+			 * @public
+			 */
+			Owl.prototype.refresh = function() {
+				if (this._items.length === 0) {
+					return false;
+				}
+
+				var start = new Date().getTime();
+
+				this.trigger('refresh');
+
+				this.setup();
+
+				this.optionsLogic();
+
+				// hide and show methods helps here to set a proper widths,
+				// this prevents scrollbar to be calculated in stage width
+				this.$stage.addClass('owl-refresh');
+
+				this.update();
+
+				this.$stage.removeClass('owl-refresh');
+
+				this.state.orientation = window.orientation;
+
+				this.watchVisibility();
+
+				this.trigger('refreshed');
+			};
+
+			/**
+			 * Save internal event references and add event based functions.
+			 * @protected
+			 */
+			Owl.prototype.eventsCall = function() {
+				// Save events references
+				this.e._onDragStart = $.proxy(function(e) {
+					this.onDragStart(e);
+				}, this);
+				this.e._onDragMove = $.proxy(function(e) {
+					this.onDragMove(e);
+				}, this);
+				this.e._onDragEnd = $.proxy(function(e) {
+					this.onDragEnd(e);
+				}, this);
+				this.e._onResize = $.proxy(function(e) {
+					this.onResize(e);
+				}, this);
+				this.e._transitionEnd = $.proxy(function(e) {
+					this.transitionEnd(e);
+				}, this);
+				this.e._preventClick = $.proxy(function(e) {
+					this.preventClick(e);
+				}, this);
+			};
+
+			/**
+			 * Checks window `resize` event.
+			 * @protected
+			 */
+			Owl.prototype.onThrottledResize = function() {
+				window.clearTimeout(this.resizeTimer);
+				this.resizeTimer = window.setTimeout(this.e._onResize, this.settings.responsiveRefreshRate);
+			};
+
+			/**
+			 * Checks window `resize` event.
+			 * @protected
+			 */
+			Owl.prototype.onResize = function() {
+				if (!this._items.length) {
+					return false;
+				}
+
+				if (this._width === this.$element.width()) {
+					return false;
+				}
+
+				if (this.trigger('resize').isDefaultPrevented()) {
+					return false;
+				}
+
+				this._width = this.$element.width();
+
+				this.invalidate('width');
+
+				this.refresh();
+
+				this.trigger('resized');
+			};
+
+			/**
+			 * Checks for touch/mouse drag event type and add run event handlers.
+			 * @protected
+			 */
+			Owl.prototype.eventsRouter = function(event) {
+				var type = event.type;
+
+				if (type === "mousedown" || type === "touchstart") {
+					this.onDragStart(event);
+				} else if (type === "mousemove" || type === "touchmove") {
+					this.onDragMove(event);
+				} else if (type === "mouseup" || type === "touchend") {
+					this.onDragEnd(event);
+				} else if (type === "touchcancel") {
+					this.onDragEnd(event);
+				}
+			};
+
+			/**
+			 * Checks for touch/mouse drag options and add necessery event handlers.
+			 * @protected
+			 */
+			Owl.prototype.internalEvents = function() {
+				var isTouch = isTouchSupport(),
+					isTouchIE = isTouchSupportIE();
+
+				if (this.settings.mouseDrag){
+					this.$stage.on('mousedown', $.proxy(function(event) { this.eventsRouter(event) }, this));
+					this.$stage.on('dragstart', function() { return false });
+					this.$stage.get(0).onselectstart = function() { return false };
+				} else {
+					this.$element.addClass('owl-text-select-on');
+				}
+
+				if (this.settings.touchDrag && !isTouchIE){
+					this.$stage.on('touchstart touchcancel', $.proxy(function(event) { this.eventsRouter(event) }, this));
+				}
+
+				// catch transitionEnd event
+				if (this.transitionEndVendor) {
+					this.on(this.$stage.get(0), this.transitionEndVendor, this.e._transitionEnd, false);
+				}
+
+				// responsive
+				if (this.settings.responsive !== false) {
+					this.on(window, 'resize', $.proxy(this.onThrottledResize, this));
+				}
+			};
+
+			/**
+			 * Handles touchstart/mousedown event.
+			 * @protected
+			 * @param {Event} event - The event arguments.
+			 */
+			Owl.prototype.onDragStart = function(event) {
+				var ev, isTouchEvent, pageX, pageY, animatedPos;
+
+				ev = event.originalEvent || event || window.event;
+
+				// prevent right click
+				if (ev.which === 3 || this.state.isTouch) {
+					return false;
+				}
+
+				if (ev.type === 'mousedown') {
+					this.$stage.addClass('owl-grab');
+				}
+
+				this.trigger('drag');
+				this.drag.startTime = new Date().getTime();
+				this.speed(0);
+				this.state.isTouch = true;
+				this.state.isScrolling = false;
+				this.state.isSwiping = false;
+				this.drag.distance = 0;
+
+				pageX = getTouches(ev).x;
+				pageY = getTouches(ev).y;
+
+				// get stage position left
+				this.drag.offsetX = this.$stage.position().left;
+				this.drag.offsetY = this.$stage.position().top;
+
+				if (this.settings.rtl) {
+					this.drag.offsetX = this.$stage.position().left + this.$stage.width() - this.width()
+						+ this.settings.margin;
+				}
+
+				// catch position // ie to fix
+				if (this.state.inMotion && this.support3d) {
+					animatedPos = this.getTransformProperty();
+					this.drag.offsetX = animatedPos;
+					this.animate(animatedPos);
+					this.state.inMotion = true;
+				} else if (this.state.inMotion && !this.support3d) {
+					this.state.inMotion = false;
+					return false;
+				}
+
+				this.drag.startX = pageX - this.drag.offsetX;
+				this.drag.startY = pageY - this.drag.offsetY;
+
+				this.drag.start = pageX - this.drag.startX;
+				this.drag.targetEl = ev.target || ev.srcElement;
+				this.drag.updatedX = this.drag.start;
+
+				// to do/check
+				// prevent links and images dragging;
+				if (this.drag.targetEl.tagName === "IMG" || this.drag.targetEl.tagName === "A") {
+					this.drag.targetEl.draggable = false;
+				}
+
+				$(document).on('mousemove.owl.dragEvents mouseup.owl.dragEvents touchmove.owl.dragEvents touchend.owl.dragEvents', $.proxy(function(event) {this.eventsRouter(event)},this));
+			};
+
+			/**
+			 * Handles the touchmove/mousemove events.
+			 * @todo Simplify
+			 * @protected
+			 * @param {Event} event - The event arguments.
+			 */
+			Owl.prototype.onDragMove = function(event) {
+				var ev, isTouchEvent, pageX, pageY, minValue, maxValue, pull;
+
+				if (!this.state.isTouch) {
+					return;
+				}
+
+				if (this.state.isScrolling) {
+					return;
+				}
+
+				ev = event.originalEvent || event || window.event;
+
+				pageX = getTouches(ev).x;
+				pageY = getTouches(ev).y;
+
+				// Drag Direction
+				this.drag.currentX = pageX - this.drag.startX;
+				this.drag.currentY = pageY - this.drag.startY;
+				this.drag.distance = this.drag.currentX - this.drag.offsetX;
+
+				// Check move direction
+				if (this.drag.distance < 0) {
+					this.state.direction = this.settings.rtl ? 'right' : 'left';
+				} else if (this.drag.distance > 0) {
+					this.state.direction = this.settings.rtl ? 'left' : 'right';
+				}
+				// Loop
+				if (this.settings.loop) {
+					if (this.op(this.drag.currentX, '>', this.coordinates(this.minimum())) && this.state.direction === 'right') {
+						this.drag.currentX -= (this.settings.center && this.coordinates(0)) - this.coordinates(this._items.length);
+					} else if (this.op(this.drag.currentX, '<', this.coordinates(this.maximum())) && this.state.direction === 'left') {
+						this.drag.currentX += (this.settings.center && this.coordinates(0)) - this.coordinates(this._items.length);
+					}
+				} else {
+					// pull
+					minValue = this.settings.rtl ? this.coordinates(this.maximum()) : this.coordinates(this.minimum());
+					maxValue = this.settings.rtl ? this.coordinates(this.minimum()) : this.coordinates(this.maximum());
+					pull = this.settings.pullDrag ? this.drag.distance / 5 : 0;
+					this.drag.currentX = Math.max(Math.min(this.drag.currentX, minValue + pull), maxValue + pull);
+				}
+
+				// Lock browser if swiping horizontal
+
+				if ((this.drag.distance > 8 || this.drag.distance < -8)) {
+					if (ev.preventDefault !== undefined) {
+						ev.preventDefault();
+					} else {
+						ev.returnValue = false;
+					}
+					this.state.isSwiping = true;
+				}
+
+				this.drag.updatedX = this.drag.currentX;
+
+				// Lock Owl if scrolling
+				if ((this.drag.currentY > 16 || this.drag.currentY < -16) && this.state.isSwiping === false) {
+					this.state.isScrolling = true;
+					this.drag.updatedX = this.drag.start;
+				}
+
+				this.animate(this.drag.updatedX);
+			};
+
+			/**
+			 * Handles the touchend/mouseup events.
+			 * @protected
+			 */
+			Owl.prototype.onDragEnd = function(event) {
+				var compareTimes, distanceAbs, closest;
+
+				if (!this.state.isTouch) {
+					return;
+				}
+
+				if (event.type === 'mouseup') {
+					this.$stage.removeClass('owl-grab');
+				}
+
+				this.trigger('dragged');
+
+				// prevent links and images dragging;
+				this.drag.targetEl.removeAttribute("draggable");
+
+				// remove drag event listeners
+
+				this.state.isTouch = false;
+				this.state.isScrolling = false;
+				this.state.isSwiping = false;
+
+				// to check
+				if (this.drag.distance === 0 && this.state.inMotion !== true) {
+					this.state.inMotion = false;
+					return false;
+				}
+
+				// prevent clicks while scrolling
+
+				this.drag.endTime = new Date().getTime();
+				compareTimes = this.drag.endTime - this.drag.startTime;
+				distanceAbs = Math.abs(this.drag.distance);
+
+				// to test
+				if (distanceAbs > 3 || compareTimes > 300) {
+					this.removeClick(this.drag.targetEl);
+				}
+
+				closest = this.closest(this.drag.updatedX);
+
+				this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed);
+				this.current(closest);
+				this.invalidate('position');
+				this.update();
+
+				// if pullDrag is off then fire transitionEnd event manually when stick
+				// to border
+				if (!this.settings.pullDrag && this.drag.updatedX === this.coordinates(closest)) {
+					this.transitionEnd();
+				}
+
+				this.drag.distance = 0;
+
+				$(document).off('.owl.dragEvents');
+			};
+
+			/**
+			 * Attaches `preventClick` to disable link while swipping.
+			 * @protected
+			 * @param {HTMLElement} [target] - The target of the `click` event.
+			 */
+			Owl.prototype.removeClick = function(target) {
+				this.drag.targetEl = target;
+				$(target).on('click.preventClick', this.e._preventClick);
+				// to make sure click is removed:
+				window.setTimeout(function() {
+					$(target).off('click.preventClick');
+				}, 300);
+			};
+
+			/**
+			 * Suppresses click event.
+			 * @protected
+			 * @param {Event} ev - The event arguments.
+			 */
+			Owl.prototype.preventClick = function(ev) {
+				if (ev.preventDefault) {
+					ev.preventDefault();
+				} else {
+					ev.returnValue = false;
+				}
+				if (ev.stopPropagation) {
+					ev.stopPropagation();
+				}
+				$(ev.target).off('click.preventClick');
+			};
+
+			/**
+			 * Catches stage position while animate (only CSS3).
+			 * @protected
+			 * @returns
+			 */
+			Owl.prototype.getTransformProperty = function() {
+				var transform, matrix3d;
+
+				transform = window.getComputedStyle(this.$stage.get(0), null).getPropertyValue(this.vendorName + 'transform');
+				// var transform = this.$stage.css(this.vendorName + 'transform')
+				transform = transform.replace(/matrix(3d)?\(|\)/g, '').split(',');
+				matrix3d = transform.length === 16;
+
+				return matrix3d !== true ? transform[4] : transform[12];
+			};
+
+			/**
+			 * Gets absolute position of the closest item for a coordinate.
+			 * @todo Setting `freeDrag` makes `closest` not reusable. See #165.
+			 * @protected
+			 * @param {Number} coordinate - The coordinate in pixel.
+			 * @return {Number} - The absolute position of the closest item.
+			 */
+			Owl.prototype.closest = function(coordinate) {
+				var position = -1, pull = 30, width = this.width(), coordinates = this.coordinates();
+
+				if (!this.settings.freeDrag) {
+					// check closest item
+					$.each(coordinates, $.proxy(function(index, value) {
+						if (coordinate > value - pull && coordinate < value + pull) {
+							position = index;
+						} else if (this.op(coordinate, '<', value)
+							&& this.op(coordinate, '>', coordinates[index + 1] || value - width)) {
+							position = this.state.direction === 'left' ? index + 1 : index;
+						}
+						return position === -1;
+					}, this));
+				}
+
+				if (!this.settings.loop) {
+					// non loop boundries
+					if (this.op(coordinate, '>', coordinates[this.minimum()])) {
+						position = coordinate = this.minimum();
+					} else if (this.op(coordinate, '<', coordinates[this.maximum()])) {
+						position = coordinate = this.maximum();
+					}
+				}
+
+				return position;
+			};
+
+			/**
+			 * Animates the stage.
+			 * @public
+			 * @param {Number} coordinate - The coordinate in pixels.
+			 */
+			Owl.prototype.animate = function(coordinate) {
+				this.trigger('translate');
+				this.state.inMotion = this.speed() > 0;
+
+				if (this.support3d) {
+					this.$stage.css({
+						transform: 'translate3d(' + coordinate + 'px' + ',0px, 0px)',
+						transition: (this.speed() / 1000) + 's'
+					});
+				} else if (this.state.isTouch) {
+					this.$stage.css({
+						left: coordinate + 'px'
+					});
+				} else {
+					this.$stage.animate({
+						left: coordinate
+					}, this.speed() / 1000, this.settings.fallbackEasing, $.proxy(function() {
+						if (this.state.inMotion) {
+							this.transitionEnd();
+						}
+					}, this));
+				}
+			};
+
+			/**
+			 * Sets the absolute position of the current item.
+			 * @public
+			 * @param {Number} [position] - The new absolute position or nothing to leave it unchanged.
+			 * @returns {Number} - The absolute position of the current item.
+			 */
+			Owl.prototype.current = function(position) {
+				if (position === undefined) {
+					return this._current;
+				}
+
+				if (this._items.length === 0) {
+					return undefined;
+				}
+
+				position = this.normalize(position);
+
+				if (this._current !== position) {
+					var event = this.trigger('change', { property: { name: 'position', value: position } });
+
+					if (event.data !== undefined) {
+						position = this.normalize(event.data);
+					}
+
+					this._current = position;
+
+					this.invalidate('position');
+
+					this.trigger('changed', { property: { name: 'position', value: this._current } });
+				}
+
+				return this._current;
+			};
+
+			/**
+			 * Invalidates the given part of the update routine.
+			 * @param {String} part - The part to invalidate.
+			 */
+			Owl.prototype.invalidate = function(part) {
+				this._invalidated[part] = true;
+			}
+
+			/**
+			 * Resets the absolute position of the current item.
+			 * @public
+			 * @param {Number} position - The absolute position of the new item.
+			 */
+			Owl.prototype.reset = function(position) {
+				position = this.normalize(position);
+
+				if (position === undefined) {
+					return;
+				}
+
+				this._speed = 0;
+				this._current = position;
+
+				this.suppress([ 'translate', 'translated' ]);
+
+				this.animate(this.coordinates(position));
+
+				this.release([ 'translate', 'translated' ]);
+			};
+
+			/**
+			 * Normalizes an absolute or a relative position for an item.
+			 * @public
+			 * @param {Number} position - The absolute or relative position to normalize.
+			 * @param {Boolean} [relative=false] - Whether the given position is relative or not.
+			 * @returns {Number} - The normalized position.
+			 */
+			Owl.prototype.normalize = function(position, relative) {
+				var n = (relative ? this._items.length : this._items.length + this._clones.length);
+
+				if (!$.isNumeric(position) || n < 1) {
+					return undefined;
+				}
+
+				if (this._clones.length) {
+					position = ((position % n) + n) % n;
+				} else {
+					position = Math.max(this.minimum(relative), Math.min(this.maximum(relative), position));
+				}
+
+				return position;
+			};
+
+			/**
+			 * Converts an absolute position for an item into a relative position.
+			 * @public
+			 * @param {Number} position - The absolute position to convert.
+			 * @returns {Number} - The converted position.
+			 */
+			Owl.prototype.relative = function(position) {
+				position = this.normalize(position);
+				position = position - this._clones.length / 2;
+				return this.normalize(position, true);
+			};
+
+			/**
+			 * Gets the maximum position for an item.
+			 * @public
+			 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
+			 * @returns {Number}
+			 */
+			Owl.prototype.maximum = function(relative) {
+				var maximum, width, i = 0, coordinate,
+					settings = this.settings;
+
+				if (relative) {
+					return this._items.length - 1;
+				}
+
+				if (!settings.loop && settings.center) {
+					maximum = this._items.length - 1;
+				} else if (!settings.loop && !settings.center) {
+					maximum = this._items.length - settings.items;
+				} else if (settings.loop || settings.center) {
+					maximum = this._items.length + settings.items;
+				} else if (settings.autoWidth || settings.merge) {
+					revert = settings.rtl ? 1 : -1;
+					width = this.$stage.width() - this.$element.width();
+					while (coordinate = this.coordinates(i)) {
+						if (coordinate * revert >= width) {
+							break;
+						}
+						maximum = ++i;
+					}
+				} else {
+					throw 'Can not detect maximum absolute position.'
+				}
+
+				return maximum;
+			};
+
+			/**
+			 * Gets the minimum position for an item.
+			 * @public
+			 * @param {Boolean} [relative=false] - Whether to return an absolute position or a relative position.
+			 * @returns {Number}
+			 */
+			Owl.prototype.minimum = function(relative) {
+				if (relative) {
+					return 0;
+				}
+
+				return this._clones.length / 2;
+			};
+
+			/**
+			 * Gets an item at the specified relative position.
+			 * @public
+			 * @param {Number} [position] - The relative position of the item.
+			 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
+			 */
+			Owl.prototype.items = function(position) {
+				if (position === undefined) {
+					return this._items.slice();
+				}
+
+				position = this.normalize(position, true);
+				return this._items[position];
+			};
+
+			/**
+			 * Gets an item at the specified relative position.
+			 * @public
+			 * @param {Number} [position] - The relative position of the item.
+			 * @return {jQuery|Array.<jQuery>} - The item at the given position or all items if no position was given.
+			 */
+			Owl.prototype.mergers = function(position) {
+				if (position === undefined) {
+					return this._mergers.slice();
+				}
+
+				position = this.normalize(position, true);
+				return this._mergers[position];
+			};
+
+			/**
+			 * Gets the absolute positions of clones for an item.
+			 * @public
+			 * @param {Number} [position] - The relative position of the item.
+			 * @returns {Array.<Number>} - The absolute positions of clones for the item or all if no position was given.
+			 */
+			Owl.prototype.clones = function(position) {
+				var odd = this._clones.length / 2,
+					even = odd + this._items.length,
+					map = function(index) { return index % 2 === 0 ? even + index / 2 : odd - (index + 1) / 2 };
+
+				if (position === undefined) {
+					return $.map(this._clones, function(v, i) { return map(i) });
+				}
+
+				return $.map(this._clones, function(v, i) { return v === position ? map(i) : null });
+			};
+
+			/**
+			 * Sets the current animation speed.
+			 * @public
+			 * @param {Number} [speed] - The animation speed in milliseconds or nothing to leave it unchanged.
+			 * @returns {Number} - The current animation speed in milliseconds.
+			 */
+			Owl.prototype.speed = function(speed) {
+				if (speed !== undefined) {
+					this._speed = speed;
+				}
+
+				return this._speed;
+			};
+
+			/**
+			 * Gets the coordinate of an item.
+			 * @todo The name of this method is missleanding.
+			 * @public
+			 * @param {Number} position - The absolute position of the item within `minimum()` and `maximum()`.
+			 * @returns {Number|Array.<Number>} - The coordinate of the item in pixel or all coordinates.
+			 */
+			Owl.prototype.coordinates = function(position) {
+				var coordinate = null;
+
+				if (position === undefined) {
+					return $.map(this._coordinates, $.proxy(function(coordinate, index) {
+						return this.coordinates(index);
+					}, this));
+				}
+
+				if (this.settings.center) {
+					coordinate = this._coordinates[position];
+					coordinate += (this.width() - coordinate + (this._coordinates[position - 1] || 0)) / 2 * (this.settings.rtl ? -1 : 1);
+				} else {
+					coordinate = this._coordinates[position - 1] || 0;
+				}
+
+				return coordinate;
+			};
+
+			/**
+			 * Calculates the speed for a translation.
+			 * @protected
+			 * @param {Number} from - The absolute position of the start item.
+			 * @param {Number} to - The absolute position of the target item.
+			 * @param {Number} [factor=undefined] - The time factor in milliseconds.
+			 * @returns {Number} - The time in milliseconds for the translation.
+			 */
+			Owl.prototype.duration = function(from, to, factor) {
+				return Math.min(Math.max(Math.abs(to - from), 1), 6) * Math.abs((factor || this.settings.smartSpeed));
+			};
+
+			/**
+			 * Slides to the specified item.
+			 * @public
+			 * @param {Number} position - The position of the item.
+			 * @param {Number} [speed] - The time in milliseconds for the transition.
+			 */
+			Owl.prototype.to = function(position, speed) {
+				if (this.settings.loop) {
+					var distance = position - this.relative(this.current()),
+						revert = this.current(),
+						before = this.current(),
+						after = this.current() + distance,
+						direction = before - after < 0 ? true : false,
+						items = this._clones.length + this._items.length;
+
+					if (after < this.settings.items && direction === false) {
+						revert = before + this._items.length;
+						this.reset(revert);
+					} else if (after >= items - this.settings.items && direction === true) {
+						revert = before - this._items.length;
+						this.reset(revert);
+					}
+					window.clearTimeout(this.e._goToLoop);
+					this.e._goToLoop = window.setTimeout($.proxy(function() {
+						this.speed(this.duration(this.current(), revert + distance, speed));
+						this.current(revert + distance);
+						this.update();
+					}, this), 30);
+				} else {
+					this.speed(this.duration(this.current(), position, speed));
+					this.current(position);
+					this.update();
+				}
+			};
+
+			/**
+			 * Slides to the next item.
+			 * @public
+			 * @param {Number} [speed] - The time in milliseconds for the transition.
+			 */
+			Owl.prototype.next = function(speed) {
+				speed = speed || false;
+				this.to(this.relative(this.current()) + 1, speed);
+			};
+
+			/**
+			 * Slides to the previous item.
+			 * @public
+			 * @param {Number} [speed] - The time in milliseconds for the transition.
+			 */
+			Owl.prototype.prev = function(speed) {
+				speed = speed || false;
+				this.to(this.relative(this.current()) - 1, speed);
+			};
+
+			/**
+			 * Handles the end of an animation.
+			 * @protected
+			 * @param {Event} event - The event arguments.
+			 */
+			Owl.prototype.transitionEnd = function(event) {
+
+				// if css2 animation then event object is undefined
+				if (event !== undefined) {
+					event.stopPropagation();
+
+					// Catch only owl-stage transitionEnd event
+					if ((event.target || event.srcElement || event.originalTarget) !== this.$stage.get(0)) {
+						return false;
+					}
+				}
+
+				this.state.inMotion = false;
+				this.trigger('translated');
+			};
+
+			/**
+			 * Gets viewport width.
+			 * @protected
+			 * @return {Number} - The width in pixel.
+			 */
+			Owl.prototype.viewport = function() {
+				var width;
+				if (this.options.responsiveBaseElement !== window) {
+					width = $(this.options.responsiveBaseElement).width();
+				} else if (window.innerWidth) {
+					width = window.innerWidth;
+				} else if (document.documentElement && document.documentElement.clientWidth) {
+					width = document.documentElement.clientWidth;
+				} else {
+					throw 'Can not detect viewport width.';
+				}
+				return width;
+			};
+
+			/**
+			 * Replaces the current content.
+			 * @public
+			 * @param {HTMLElement|jQuery|String} content - The new content.
+			 */
+			Owl.prototype.replace = function(content) {
+				this.$stage.empty();
+				this._items = [];
+
+				if (content) {
+					content = (content instanceof jQuery) ? content : $(content);
+				}
+
+				if (this.settings.nestedItemSelector) {
+					content = content.find('.' + this.settings.nestedItemSelector);
+				}
+
+				content.filter(function() {
+					return this.nodeType === 1;
+				}).each($.proxy(function(index, item) {
+					item = this.prepare(item);
+					this.$stage.append(item);
+					this._items.push(item);
+					this._mergers.push(item.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1);
+				}, this));
+
+				this.reset($.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0);
+
+				this.invalidate('items');
+			};
+
+			/**
+			 * Adds an item.
+			 * @todo Use `item` instead of `content` for the event arguments.
+			 * @public
+			 * @param {HTMLElement|jQuery|String} content - The item content to add.
+			 * @param {Number} [position] - The relative position at which to insert the item otherwise the item will be added to the end.
+			 */
+			Owl.prototype.add = function(content, position) {
+				position = position === undefined ? this._items.length : this.normalize(position, true);
+
+				this.trigger('add', { content: content, position: position });
+
+				if (this._items.length === 0 || position === this._items.length) {
+					this.$stage.append(content);
+					this._items.push(content);
+					this._mergers.push(content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1);
+				} else {
+					this._items[position].before(content);
+					this._items.splice(position, 0, content);
+					this._mergers.splice(position, 0, content.find('[data-merge]').andSelf('[data-merge]').attr('data-merge') * 1 || 1);
+				}
+
+				this.invalidate('items');
+
+				this.trigger('added', { content: content, position: position });
+			};
+
+			/**
+			 * Removes an item by its position.
+			 * @todo Use `item` instead of `content` for the event arguments.
+			 * @public
+			 * @param {Number} position - The relative position of the item to remove.
+			 */
+			Owl.prototype.remove = function(position) {
+				position = this.normalize(position, true);
+
+				if (position === undefined) {
+					return;
+				}
+
+				this.trigger('remove', { content: this._items[position], position: position });
+
+				this._items[position].remove();
+				this._items.splice(position, 1);
+				this._mergers.splice(position, 1);
+
+				this.invalidate('items');
+
+				this.trigger('removed', { content: null, position: position });
+			};
+
+			/**
+			 * Adds triggerable events.
+			 * @protected
+			 */
+			Owl.prototype.addTriggerableEvents = function() {
+				var handler = $.proxy(function(callback, event) {
+					return $.proxy(function(e) {
+						if (e.relatedTarget !== this) {
+							this.suppress([ event ]);
+							callback.apply(this, [].slice.call(arguments, 1));
+							this.release([ event ]);
+						}
+					}, this);
+				}, this);
+
+				$.each({
+					'next': this.next,
+					'prev': this.prev,
+					'to': this.to,
+					'destroy': this.destroy,
+					'refresh': this.refresh,
+					'replace': this.replace,
+					'add': this.add,
+					'remove': this.remove
+				}, $.proxy(function(event, callback) {
+					this.$element.on(event + '.owl.carousel', handler(callback, event + '.owl.carousel'));
+				}, this));
+
+			};
+
+			/**
+			 * Watches the visibility of the carousel element.
+			 * @protected
+			 */
+			Owl.prototype.watchVisibility = function() {
+
+				// test on zepto
+				if (!isElVisible(this.$element.get(0))) {
+					this.$element.addClass('owl-hidden');
+					window.clearInterval(this.e._checkVisibile);
+					this.e._checkVisibile = window.setInterval($.proxy(checkVisible, this), 500);
+				}
+
+				function isElVisible(el) {
+					return el.offsetWidth > 0 && el.offsetHeight > 0;
+				}
+
+				function checkVisible() {
+					if (isElVisible(this.$element.get(0))) {
+						this.$element.removeClass('owl-hidden');
+						this.refresh();
+						window.clearInterval(this.e._checkVisibile);
+					}
+				}
+			};
+
+			/**
+			 * Preloads images with auto width.
+			 * @protected
+			 * @todo Still to test
+			 */
+			Owl.prototype.preloadAutoWidthImages = function(imgs) {
+				var loaded, that, $el, img;
+
+				loaded = 0;
+				that = this;
+				imgs.each(function(i, el) {
+					$el = $(el);
+					img = new Image();
+
+					img.onload = function() {
+						loaded++;
+						$el.attr('src', img.src);
+						$el.css('opacity', 1);
+						if (loaded >= imgs.length) {
+							that.state.imagesLoaded = true;
+							that.initialize();
+						}
+					};
+
+					img.src = $el.attr('src') || $el.attr('data-src') || $el.attr('data-src-retina');
+				});
+			};
+
+			/**
+			 * Destroys the carousel.
+			 * @public
+			 */
+			Owl.prototype.destroy = function() {
+
+				if (this.$element.hasClass(this.settings.themeClass)) {
+					this.$element.removeClass(this.settings.themeClass);
+				}
+
+				if (this.settings.responsive !== false) {
+					$(window).off('resize.owl.carousel');
+				}
+
+				if (this.transitionEndVendor) {
+					this.off(this.$stage.get(0), this.transitionEndVendor, this.e._transitionEnd);
+				}
+
+				for ( var i in this._plugins) {
+					this._plugins[i].destroy();
+				}
+
+				if (this.settings.mouseDrag || this.settings.touchDrag) {
+					this.$stage.off('mousedown touchstart touchcancel');
+					$(document).off('.owl.dragEvents');
+					this.$stage.get(0).onselectstart = function() {};
+					this.$stage.off('dragstart', function() { return false });
+				}
+
+				// remove event handlers in the ".owl.carousel" namespace
+				this.$element.off('.owl');
+
+				this.$stage.children('.cloned').remove();
+				this.e = null;
+				this.$element.removeData('owlCarousel');
+
+				this.$stage.children().contents().unwrap();
+				this.$stage.children().unwrap();
+				this.$stage.unwrap();
+			};
+
+			/**
+			 * Operators to calculate right-to-left and left-to-right.
+			 * @protected
+			 * @param {Number} [a] - The left side operand.
+			 * @param {String} [o] - The operator.
+			 * @param {Number} [b] - The right side operand.
+			 */
+			Owl.prototype.op = function(a, o, b) {
+				var rtl = this.settings.rtl;
+				switch (o) {
+					case '<':
+						return rtl ? a > b : a < b;
+					case '>':
+						return rtl ? a < b : a > b;
+					case '>=':
+						return rtl ? a <= b : a >= b;
+					case '<=':
+						return rtl ? a >= b : a <= b;
+					default:
+						break;
+				}
+			};
+
+			/**
+			 * Attaches to an internal event.
+			 * @protected
+			 * @param {HTMLElement} element - The event source.
+			 * @param {String} event - The event name.
+			 * @param {Function} listener - The event handler to attach.
+			 * @param {Boolean} capture - Wether the event should be handled at the capturing phase or not.
+			 */
+			Owl.prototype.on = function(element, event, listener, capture) {
+				if (element.addEventListener) {
+					element.addEventListener(event, listener, capture);
+				} else if (element.attachEvent) {
+					element.attachEvent('on' + event, listener);
+				}
+			};
+
+			/**
+			 * Detaches from an internal event.
+			 * @protected
+			 * @param {HTMLElement} element - The event source.
+			 * @param {String} event - The event name.
+			 * @param {Function} listener - The attached event handler to detach.
+			 * @param {Boolean} capture - Wether the attached event handler was registered as a capturing listener or not.
+			 */
+			Owl.prototype.off = function(element, event, listener, capture) {
+				if (element.removeEventListener) {
+					element.removeEventListener(event, listener, capture);
+				} else if (element.detachEvent) {
+					element.detachEvent('on' + event, listener);
+				}
+			};
+
+			/**
+			 * Triggers an public event.
+			 * @protected
+			 * @param {String} name - The event name.
+			 * @param {*} [data=null] - The event data.
+			 * @param {String} [namespace=.owl.carousel] - The event namespace.
+			 * @returns {Event} - The event arguments.
+			 */
+			Owl.prototype.trigger = function(name, data, namespace) {
+				var status = {
+					item: { count: this._items.length, index: this.current() }
+				}, handler = $.camelCase(
+					$.grep([ 'on', name, namespace ], function(v) { return v })
+						.join('-').toLowerCase()
+				), event = $.Event(
+					[ name, 'owl', namespace || 'carousel' ].join('.').toLowerCase(),
+					$.extend({ relatedTarget: this }, status, data)
+				);
+
+				if (!this._supress[name]) {
+					$.each(this._plugins, function(name, plugin) {
+						if (plugin.onTrigger) {
+							plugin.onTrigger(event);
+						}
+					});
+
+					this.$element.trigger(event);
+
+					if (this.settings && typeof this.settings[handler] === 'function') {
+						this.settings[handler].apply(this, event);
+					}
+				}
+
+				return event;
+			};
+
+			/**
+			 * Suppresses events.
+			 * @protected
+			 * @param {Array.<String>} events - The events to suppress.
+			 */
+			Owl.prototype.suppress = function(events) {
+				$.each(events, $.proxy(function(index, event) {
+					this._supress[event] = true;
+				}, this));
+			}
+
+			/**
+			 * Releases suppressed events.
+			 * @protected
+			 * @param {Array.<String>} events - The events to release.
+			 */
+			Owl.prototype.release = function(events) {
+				$.each(events, $.proxy(function(index, event) {
+					delete this._supress[event];
+				}, this));
+			}
+
+			/**
+			 * Checks the availability of some browser features.
+			 * @protected
+			 */
+			Owl.prototype.browserSupport = function() {
+				this.support3d = isPerspective();
+
+				if (this.support3d) {
+					this.transformVendor = isTransform();
+
+					// take transitionend event name by detecting transition
+					var endVendors = [ 'transitionend', 'webkitTransitionEnd', 'transitionend', 'oTransitionEnd' ];
+					this.transitionEndVendor = endVendors[isTransition()];
+
+					// take vendor name from transform name
+					this.vendorName = this.transformVendor.replace(/Transform/i, '');
+					this.vendorName = this.vendorName !== '' ? '-' + this.vendorName.toLowerCase() + '-' : '';
+				}
+
+				this.state.orientation = window.orientation;
+			};
+
+			/**
+			 * Get touch/drag coordinats.
+			 * @private
+			 * @param {event} - mousedown/touchstart event
+			 * @returns {object} - Contains X and Y of current mouse/touch position
+			 */
+
+			function getTouches(event) {
+				if (event.touches !== undefined) {
+					return {
+						x: event.touches[0].pageX,
+						y: event.touches[0].pageY
+					};
+				}
+
+				if (event.touches === undefined) {
+					if (event.pageX !== undefined) {
+						return {
+							x: event.pageX,
+							y: event.pageY
+						};
+					}
+
+					if (event.pageX === undefined) {
+						return {
+							x: event.clientX,
+							y: event.clientY
+						};
+					}
+				}
+			}
+
+			/**
+			 * Checks for CSS support.
+			 * @private
+			 * @param {Array} array - The CSS properties to check for.
+			 * @returns {Array} - Contains the supported CSS property name and its index or `false`.
+			 */
+			function isStyleSupported(array) {
+				var p, s, fake = document.createElement('div'), list = array;
+				for (p in list) {
+					s = list[p];
+					if (typeof fake.style[s] !== 'undefined') {
+						fake = null;
+						return [ s, p ];
+					}
+				}
+				return [ false ];
+			}
+
+			/**
+			 * Checks for CSS transition support.
+			 * @private
+			 * @todo Realy bad design
+			 * @returns {Number}
+			 */
+			function isTransition() {
+				return isStyleSupported([ 'transition', 'WebkitTransition', 'MozTransition', 'OTransition' ])[1];
+			}
+
+			/**
+			 * Checks for CSS transform support.
+			 * @private
+			 * @returns {String} The supported property name or false.
+			 */
+			function isTransform() {
+				return isStyleSupported([ 'transform', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform' ])[0];
+			}
+
+			/**
+			 * Checks for CSS perspective support.
+			 * @private
+			 * @returns {String} The supported property name or false.
+			 */
+			function isPerspective() {
+				return isStyleSupported([ 'perspective', 'webkitPerspective', 'MozPerspective', 'OPerspective', 'MsPerspective' ])[0];
+			}
+
+			/**
+			 * Checks wether touch is supported or not.
+			 * @private
+			 * @returns {Boolean}
+			 */
+			function isTouchSupport() {
+				return 'ontouchstart' in window || !!(navigator.msMaxTouchPoints);
+			}
+
+			/**
+			 * Checks wether touch is supported or not for IE.
+			 * @private
+			 * @returns {Boolean}
+			 */
+			function isTouchSupportIE() {
+				return window.navigator.msPointerEnabled;
+			}
+
+			/**
+			 * The jQuery Plugin for the Owl Carousel
+			 * @public
+			 */
+			$.fn.owlCarousel = function(options) {
+				return this.each(function() {
+					if (!$(this).data('owlCarousel')) {
+						$(this).data('owlCarousel', new Owl(this, options));
+					}
+				});
+			};
+
+			/**
+			 * The constructor for the jQuery Plugin
+			 * @public
+			 */
+			$.fn.owlCarousel.Constructor = Owl;
+
+		})(window.Zepto || window.jQuery, window, document);
+
+		/**
+		 * Lazy Plugin
+		 * @version 2.0.0
+		 * @author Bartosz Wojciechowski
+		 * @license The MIT License (MIT)
+		 */
+		;(function($, window, document, undefined) {
+
+			/**
+			 * Creates the lazy plugin.
+			 * @class The Lazy Plugin
+			 * @param {Owl} carousel - The Owl Carousel
+			 */
+			var Lazy = function(carousel) {
+
+				/**
+				 * Reference to the core.
+				 * @protected
+				 * @type {Owl}
+				 */
+				this._core = carousel;
+
+				/**
+				 * Already loaded items.
+				 * @protected
+				 * @type {Array.<jQuery>}
+				 */
+				this._loaded = [];
+
+				/**
+				 * Event handlers.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._handlers = {
+					'initialized.owl.carousel change.owl.carousel': $.proxy(function(e) {
+						if (!e.namespace) {
+							return;
+						}
+
+						if (!this._core.settings || !this._core.settings.lazyLoad) {
+							return;
+						}
+
+						if ((e.property && e.property.name == 'position') || e.type == 'initialized') {
+							var settings = this._core.settings,
+								n = (settings.center && Math.ceil(settings.items / 2) || settings.items),
+								i = ((settings.center && n * -1) || 0),
+								position = ((e.property && e.property.value) || this._core.current()) + i,
+								clones = this._core.clones().length,
+								load = $.proxy(function(i, v) { this.load(v) }, this);
+
+							while (i++ < n) {
+								this.load(clones / 2 + this._core.relative(position));
+								clones && $.each(this._core.clones(this._core.relative(position++)), load);
+							}
+						}
+					}, this)
+				};
+
+				// set the default options
+				this._core.options = $.extend({}, Lazy.Defaults, this._core.options);
+
+				// register event handler
+				this._core.$element.on(this._handlers);
+			}
+
+			/**
+			 * Default options.
+			 * @public
+			 */
+			Lazy.Defaults = {
+				lazyLoad: false
+			}
+
+			/**
+			 * Loads all resources of an item at the specified position.
+			 * @param {Number} position - The absolute position of the item.
+			 * @protected
+			 */
+			Lazy.prototype.load = function(position) {
+				var $item = this._core.$stage.children().eq(position),
+					$elements = $item && $item.find('.owl-lazy');
+
+				if (!$elements || $.inArray($item.get(0), this._loaded) > -1) {
+					return;
+				}
+
+				$elements.each($.proxy(function(index, element) {
+					var $element = $(element), image,
+						url = (window.devicePixelRatio > 1 && $element.attr('data-src-retina')) || $element.attr('data-src');
+
+					this._core.trigger('load', { element: $element, url: url }, 'lazy');
+
+					if ($element.is('img')) {
+						$element.one('load.owl.lazy', $.proxy(function() {
+							$element.css('opacity', 1);
+							this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
+						}, this)).attr('src', url);
+					} else {
+						image = new Image();
+						image.onload = $.proxy(function() {
+							$element.css({
+								'background-image': 'url(' + url + ')',
+								'opacity': '1'
+							});
+							this._core.trigger('loaded', { element: $element, url: url }, 'lazy');
+						}, this);
+						image.src = url;
+					}
+				}, this));
+
+				this._loaded.push($item.get(0));
+			}
+
+			/**
+			 * Destroys the plugin.
+			 * @public
+			 */
+			Lazy.prototype.destroy = function() {
+				var handler, property;
+
+				for (handler in this.handlers) {
+					this._core.$element.off(handler, this.handlers[handler]);
+				}
+				for (property in Object.getOwnPropertyNames(this)) {
+					typeof this[property] != 'function' && (this[property] = null);
+				}
+			}
+
+			$.fn.owlCarousel.Constructor.Plugins.Lazy = Lazy;
+
+		})(window.Zepto || window.jQuery, window, document);
+
+		/**
+		 * AutoHeight Plugin
+		 * @version 2.0.0
+		 * @author Bartosz Wojciechowski
+		 * @license The MIT License (MIT)
+		 */
+		;(function($, window, document, undefined) {
+
+			/**
+			 * Creates the auto height plugin.
+			 * @class The Auto Height Plugin
+			 * @param {Owl} carousel - The Owl Carousel
+			 */
+			var AutoHeight = function(carousel) {
+				/**
+				 * Reference to the core.
+				 * @protected
+				 * @type {Owl}
+				 */
+				this._core = carousel;
+
+				/**
+				 * All event handlers.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._handlers = {
+					'initialized.owl.carousel': $.proxy(function() {
+						if (this._core.settings.autoHeight) {
+							this.update();
+						}
+					}, this),
+					'changed.owl.carousel': $.proxy(function(e) {
+						if (this._core.settings.autoHeight && e.property.name == 'position'){
+							this.update();
+						}
+					}, this),
+					'loaded.owl.lazy': $.proxy(function(e) {
+						if (this._core.settings.autoHeight && e.element.closest('.' + this._core.settings.itemClass)
+							=== this._core.$stage.children().eq(this._core.current())) {
+							this.update();
+						}
+					}, this)
+				};
+
+				// set default options
+				this._core.options = $.extend({}, AutoHeight.Defaults, this._core.options);
+
+				// register event handlers
+				this._core.$element.on(this._handlers);
+			};
+
+			/**
+			 * Default options.
+			 * @public
+			 */
+			AutoHeight.Defaults = {
+				autoHeight: false,
+				autoHeightClass: 'owl-height'
+			};
+
+			/**
+			 * Updates the view.
+			 */
+			AutoHeight.prototype.update = function() {
+				this._core.$stage.parent()
+					.height(this._core.$stage.children().eq(this._core.current()).height())
+					.addClass(this._core.settings.autoHeightClass);
+			};
+
+			AutoHeight.prototype.destroy = function() {
+				var handler, property;
+
+				for (handler in this._handlers) {
+					this._core.$element.off(handler, this._handlers[handler]);
+				}
+				for (property in Object.getOwnPropertyNames(this)) {
+					typeof this[property] != 'function' && (this[property] = null);
+				}
+			};
+
+			$.fn.owlCarousel.Constructor.Plugins.AutoHeight = AutoHeight;
+
+		})(window.Zepto || window.jQuery, window, document);
+
+		/**
+		 * Video Plugin
+		 * @version 2.0.0
+		 * @author Bartosz Wojciechowski
+		 * @license The MIT License (MIT)
+		 */
+		;(function($, window, document, undefined) {
+
+			/**
+			 * Creates the video plugin.
+			 * @class The Video Plugin
+			 * @param {Owl} carousel - The Owl Carousel
+			 */
+			var Video = function(carousel) {
+				/**
+				 * Reference to the core.
+				 * @protected
+				 * @type {Owl}
+				 */
+				this._core = carousel;
+
+				/**
+				 * Cache all video URLs.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._videos = {};
+
+				/**
+				 * Current playing item.
+				 * @protected
+				 * @type {jQuery}
+				 */
+				this._playing = null;
+
+				/**
+				 * Whether this is in fullscreen or not.
+				 * @protected
+				 * @type {Boolean}
+				 */
+				this._fullscreen = false;
+
+				/**
+				 * All event handlers.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._handlers = {
+					'resize.owl.carousel': $.proxy(function(e) {
+						if (this._core.settings.video && !this.isInFullScreen()) {
+							e.preventDefault();
+						}
+					}, this),
+					'refresh.owl.carousel changed.owl.carousel': $.proxy(function(e) {
+						if (this._playing) {
+							this.stop();
+						}
+					}, this),
+					'prepared.owl.carousel': $.proxy(function(e) {
+						var $element = $(e.content).find('.owl-video');
+						if ($element.length) {
+							$element.css('display', 'none');
+							this.fetch($element, $(e.content));
+						}
+					}, this)
+				};
+
+				// set default options
+				this._core.options = $.extend({}, Video.Defaults, this._core.options);
+
+				// register event handlers
+				this._core.$element.on(this._handlers);
+
+				this._core.$element.on('click.owl.video', '.owl-video-play-icon', $.proxy(function(e) {
+					this.play(e);
+				}, this));
+			};
+
+			/**
+			 * Default options.
+			 * @public
+			 */
+			Video.Defaults = {
+				video: false,
+				videoHeight: false,
+				videoWidth: false
+			};
+
+			/**
+			 * Gets the video ID and the type (YouTube/Vimeo only).
+			 * @protected
+			 * @param {jQuery} target - The target containing the video data.
+			 * @param {jQuery} item - The item containing the video.
+			 */
+			Video.prototype.fetch = function(target, item) {
+
+				var type = target.attr('data-vimeo-id') ? 'vimeo' : 'youtube',
+					id = target.attr('data-vimeo-id') || target.attr('data-youtube-id'),
+					width = target.attr('data-width') || this._core.settings.videoWidth,
+					height = target.attr('data-height') || this._core.settings.videoHeight,
+					url = target.attr('href');
+
+				if (url) {
+					id = url.match(/(http:|https:|)\/\/(player.|www.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com))\/(video\/|embed\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/);
+
+					if (id[3].indexOf('youtu') > -1) {
+						type = 'youtube';
+					} else if (id[3].indexOf('vimeo') > -1) {
+						type = 'vimeo';
+					} else {
+						throw new Error('Video URL not supported.');
+					}
+					id = id[6];
+				} else {
+					throw new Error('Missing video URL.');
+				}
+
+				this._videos[url] = {
+					type: type,
+					id: id,
+					width: width,
+					height: height
+				};
+
+				item.attr('data-video', url);
+
+				this.thumbnail(target, this._videos[url]);
+			};
+
+			/**
+			 * Creates video thumbnail.
+			 * @protected
+			 * @param {jQuery} target - The target containing the video data.
+			 * @param {Object} info - The video info object.
+			 * @see `fetch`
+			 */
+			Video.prototype.thumbnail = function(target, video) {
+
+				var tnLink,
+					icon,
+					path,
+					dimensions = video.width && video.height ? 'style="width:' + video.width + 'px;height:' + video.height + 'px;"' : '',
+					customTn = target.find('img'),
+					srcType = 'src',
+					lazyClass = '',
+					settings = this._core.settings,
+					create = function(path) {
+						icon = '<div class="owl-video-play-icon"></div>';
+
+						if (settings.lazyLoad) {
+							tnLink = '<div class="owl-video-tn ' + lazyClass + '" ' + srcType + '="' + path + '"></div>';
+						} else {
+							tnLink = '<div class="owl-video-tn" style="opacity:1;background-image:url(' + path + ')"></div>';
+						}
+						target.after(tnLink);
+						target.after(icon);
+					};
+
+				// wrap video content into owl-video-wrapper div
+				target.wrap('<div class="owl-video-wrapper"' + dimensions + '></div>');
+
+				if (this._core.settings.lazyLoad) {
+					srcType = 'data-src';
+					lazyClass = 'owl-lazy';
+				}
+
+				// custom thumbnail
+				if (customTn.length) {
+					create(customTn.attr(srcType));
+					customTn.remove();
+					return false;
+				}
+
+				if (video.type === 'youtube') {
+					path = "http://img.youtube.com/vi/" + video.id + "/hqdefault.jpg";
+					create(path);
+				} else if (video.type === 'vimeo') {
+					$.ajax({
+						type: 'GET',
+						url: 'http://vimeo.com/api/v2/video/' + video.id + '.json',
+						jsonp: 'callback',
+						dataType: 'jsonp',
+						success: function(data) {
+							path = data[0].thumbnail_large;
+							create(path);
+						}
+					});
+				}
+			};
+
+			/**
+			 * Stops the current video.
+			 * @public
+			 */
+			Video.prototype.stop = function() {
+				this._core.trigger('stop', null, 'video');
+				this._playing.find('.owl-video-frame').remove();
+				this._playing.removeClass('owl-video-playing');
+				this._playing = null;
+			};
+
+			/**
+			 * Starts the current video.
+			 * @public
+			 * @param {Event} ev - The event arguments.
+			 */
+			Video.prototype.play = function(ev) {
+				this._core.trigger('play', null, 'video');
+
+				if (this._playing) {
+					this.stop();
+				}
+
+				var target = $(ev.target || ev.srcElement),
+					item = target.closest('.' + this._core.settings.itemClass),
+					video = this._videos[item.attr('data-video')],
+					width = video.width || '100%',
+					height = video.height || this._core.$stage.height(),
+					html, wrap;
+
+				if (video.type === 'youtube') {
+					html = '<iframe width="' + width + '" height="' + height + '" src="http://www.youtube.com/embed/'
+						+ video.id + '?autoplay=1&v=' + video.id + '" frameborder="0" allowfullscreen></iframe>';
+				} else if (video.type === 'vimeo') {
+					html = '<iframe src="http://player.vimeo.com/video/' + video.id + '?autoplay=1" width="' + width
+						+ '" height="' + height
+						+ '" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
+				}
+
+				item.addClass('owl-video-playing');
+				this._playing = item;
+
+				wrap = $('<div style="height:' + height + 'px; width:' + width + 'px" class="owl-video-frame">'
+					+ html + '</div>');
+				target.after(wrap);
+			};
+
+			/**
+			 * Checks whether an video is currently in full screen mode or not.
+			 * @todo Bad style because looks like a readonly method but changes members.
+			 * @protected
+			 * @returns {Boolean}
+			 */
+			Video.prototype.isInFullScreen = function() {
+
+				// if Vimeo Fullscreen mode
+				var element = document.fullscreenElement || document.mozFullScreenElement
+					|| document.webkitFullscreenElement;
+
+				if (element && $(element).parent().hasClass('owl-video-frame')) {
+					this._core.speed(0);
+					this._fullscreen = true;
+				}
+
+				if (element && this._fullscreen && this._playing) {
+					return false;
+				}
+
+				// comming back from fullscreen
+				if (this._fullscreen) {
+					this._fullscreen = false;
+					return false;
+				}
+
+				// check full screen mode and window orientation
+				if (this._playing) {
+					if (this._core.state.orientation !== window.orientation) {
+						this._core.state.orientation = window.orientation;
+						return false;
+					}
+				}
+
+				return true;
+			};
+
+			/**
+			 * Destroys the plugin.
+			 */
+			Video.prototype.destroy = function() {
+				var handler, property;
+
+				this._core.$element.off('click.owl.video');
+
+				for (handler in this._handlers) {
+					this._core.$element.off(handler, this._handlers[handler]);
+				}
+				for (property in Object.getOwnPropertyNames(this)) {
+					typeof this[property] != 'function' && (this[property] = null);
+				}
+			};
+
+			$.fn.owlCarousel.Constructor.Plugins.Video = Video;
+
+		})(window.Zepto || window.jQuery, window, document);
+
+		/**
+		 * Animate Plugin
+		 * @version 2.0.0
+		 * @author Bartosz Wojciechowski
+		 * @license The MIT License (MIT)
+		 */
+		;(function($, window, document, undefined) {
+
+			/**
+			 * Creates the animate plugin.
+			 * @class The Navigation Plugin
+			 * @param {Owl} scope - The Owl Carousel
+			 */
+			var Animate = function(scope) {
+				this.core = scope;
+				this.core.options = $.extend({}, Animate.Defaults, this.core.options);
+				this.swapping = true;
+				this.previous = undefined;
+				this.next = undefined;
+
+				this.handlers = {
+					'change.owl.carousel': $.proxy(function(e) {
+						if (e.property.name == 'position') {
+							this.previous = this.core.current();
+							this.next = e.property.value;
+						}
+					}, this),
+					'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': $.proxy(function(e) {
+						this.swapping = e.type == 'translated';
+					}, this),
+					'translate.owl.carousel': $.proxy(function(e) {
+						if (this.swapping && (this.core.options.animateOut || this.core.options.animateIn)) {
+							this.swap();
+						}
+					}, this)
+				};
+
+				this.core.$element.on(this.handlers);
+			};
+
+			/**
+			 * Default options.
+			 * @public
+			 */
+			Animate.Defaults = {
+				animateOut: false,
+				animateIn: false
+			};
+
+			/**
+			 * Toggles the animation classes whenever an translations starts.
+			 * @protected
+			 * @returns {Boolean|undefined}
+			 */
+			Animate.prototype.swap = function() {
+
+				if (this.core.settings.items !== 1 || !this.core.support3d) {
+					return;
+				}
+
+				this.core.speed(0);
+
+				var left,
+					clear = $.proxy(this.clear, this),
+					previous = this.core.$stage.children().eq(this.previous),
+					next = this.core.$stage.children().eq(this.next),
+					incoming = this.core.settings.animateIn,
+					outgoing = this.core.settings.animateOut;
+
+				if (this.core.current() === this.previous) {
+					return;
+				}
+
+				if (outgoing) {
+					left = this.core.coordinates(this.previous) - this.core.coordinates(this.next);
+					previous.css( { 'left': left + 'px' } )
+						.addClass('animated owl-animated-out')
+						.addClass(outgoing)
+						.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', clear);
+				}
+
+				if (incoming) {
+					next.addClass('animated owl-animated-in')
+						.addClass(incoming)
+						.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', clear);
+				}
+			};
+
+			Animate.prototype.clear = function(e) {
+				$(e.target).css( { 'left': '' } )
+					.removeClass('animated owl-animated-out owl-animated-in')
+					.removeClass(this.core.settings.animateIn)
+					.removeClass(this.core.settings.animateOut);
+				this.core.transitionEnd();
+			}
+
+			/**
+			 * Destroys the plugin.
+			 * @public
+			 */
+			Animate.prototype.destroy = function() {
+				var handler, property;
+
+				for (handler in this.handlers) {
+					this.core.$element.off(handler, this.handlers[handler]);
+				}
+				for (property in Object.getOwnPropertyNames(this)) {
+					typeof this[property] != 'function' && (this[property] = null);
+				}
+			};
+
+			$.fn.owlCarousel.Constructor.Plugins.Animate = Animate;
+
+		})(window.Zepto || window.jQuery, window, document);
+
+		/**
+		 * Autoplay Plugin
+		 * @version 2.0.0
+		 * @author Bartosz Wojciechowski
+		 * @license The MIT License (MIT)
+		 */
+		;(function($, window, document, undefined) {
+
+			/**
+			 * Creates the autoplay plugin.
+			 * @class The Autoplay Plugin
+			 * @param {Owl} scope - The Owl Carousel
+			 */
+			var Autoplay = function(scope) {
+				this.core = scope;
+				this.core.options = $.extend({}, Autoplay.Defaults, this.core.options);
+
+				this.handlers = {
+					'translated.owl.carousel refreshed.owl.carousel': $.proxy(function() {
+						this.autoplay();
+					}, this),
+					'play.owl.autoplay': $.proxy(function(e, t, s) {
+						this.play(t, s);
+					}, this),
+					'stop.owl.autoplay': $.proxy(function() {
+						this.stop();
+					}, this),
+					'mouseover.owl.autoplay': $.proxy(function() {
+						if (this.core.settings.autoplayHoverPause) {
+							this.pause();
+						}
+					}, this),
+					'mouseleave.owl.autoplay': $.proxy(function() {
+						if (this.core.settings.autoplayHoverPause) {
+							this.autoplay();
+						}
+					}, this)
+				};
+
+				this.core.$element.on(this.handlers);
+			};
+
+			/**
+			 * Default options.
+			 * @public
+			 */
+			Autoplay.Defaults = {
+				autoplay: false,
+				autoplayTimeout: 5000,
+				autoplayHoverPause: false,
+				autoplaySpeed: false
+			};
+
+			/**
+			 * @protected
+			 * @todo Must be documented.
+			 */
+			Autoplay.prototype.autoplay = function() {
+				if (this.core.settings.autoplay && !this.core.state.videoPlay) {
+					window.clearInterval(this.interval);
+
+					this.interval = window.setInterval($.proxy(function() {
+						this.play();
+					}, this), this.core.settings.autoplayTimeout);
+				} else {
+					window.clearInterval(this.interval);
+				}
+			};
+
+			/**
+			 * Starts the autoplay.
+			 * @public
+			 * @param {Number} [timeout] - ...
+			 * @param {Number} [speed] - ...
+			 * @returns {Boolean|undefined} - ...
+			 * @todo Must be documented.
+			 */
+			Autoplay.prototype.play = function(timeout, speed) {
+				// if tab is inactive - doesnt work in <IE10
+				if (document.hidden === true) {
+					return;
+				}
+
+				if (this.core.state.isTouch || this.core.state.isScrolling
+					|| this.core.state.isSwiping || this.core.state.inMotion) {
+					return;
+				}
+
+				if (this.core.settings.autoplay === false) {
+					window.clearInterval(this.interval);
+					return;
+				}
+
+				this.core.next(this.core.settings.autoplaySpeed);
+			};
+
+			/**
+			 * Stops the autoplay.
+			 * @public
+			 */
+			Autoplay.prototype.stop = function() {
+				window.clearInterval(this.interval);
+			};
+
+			/**
+			 * Pauses the autoplay.
+			 * @public
+			 */
+			Autoplay.prototype.pause = function() {
+				window.clearInterval(this.interval);
+			};
+
+			/**
+			 * Destroys the plugin.
+			 */
+			Autoplay.prototype.destroy = function() {
+				var handler, property;
+
+				window.clearInterval(this.interval);
+
+				for (handler in this.handlers) {
+					this.core.$element.off(handler, this.handlers[handler]);
+				}
+				for (property in Object.getOwnPropertyNames(this)) {
+					typeof this[property] != 'function' && (this[property] = null);
+				}
+			};
+
+			$.fn.owlCarousel.Constructor.Plugins.autoplay = Autoplay;
+
+		})(window.Zepto || window.jQuery, window, document);
+
+		/**
+		 * Navigation Plugin
+		 * @version 2.0.0
+		 * @author Artus Kolanowski
+		 * @license The MIT License (MIT)
+		 */
+		;(function($, window, document, undefined) {
+			'use strict';
+
+			/**
+			 * Creates the navigation plugin.
+			 * @class The Navigation Plugin
+			 * @param {Owl} carousel - The Owl Carousel.
+			 */
+			var Navigation = function(carousel) {
+				/**
+				 * Reference to the core.
+				 * @protected
+				 * @type {Owl}
+				 */
+				this._core = carousel;
+
+				/**
+				 * Indicates whether the plugin is initialized or not.
+				 * @protected
+				 * @type {Boolean}
+				 */
+				this._initialized = false;
+
+				/**
+				 * The current paging indexes.
+				 * @protected
+				 * @type {Array}
+				 */
+				this._pages = [];
+
+				/**
+				 * All DOM elements of the user interface.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._controls = {};
+
+				/**
+				 * Markup for an indicator.
+				 * @protected
+				 * @type {Array.<String>}
+				 */
+				this._templates = [];
+
+				/**
+				 * The carousel element.
+				 * @type {jQuery}
+				 */
+				this.$element = this._core.$element;
+
+				/**
+				 * Overridden methods of the carousel.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._overrides = {
+					next: this._core.next,
+					prev: this._core.prev,
+					to: this._core.to
+				};
+
+				/**
+				 * All event handlers.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._handlers = {
+					'prepared.owl.carousel': $.proxy(function(e) {
+						if (this._core.settings.dotsData) {
+							this._templates.push($(e.content).find('[data-dot]').andSelf('[data-dot]').attr('data-dot'));
+						}
+					}, this),
+					'add.owl.carousel': $.proxy(function(e) {
+						if (this._core.settings.dotsData) {
+							this._templates.splice(e.position, 0, $(e.content).find('[data-dot]').andSelf('[data-dot]').attr('data-dot'));
+						}
+					}, this),
+					'remove.owl.carousel prepared.owl.carousel': $.proxy(function(e) {
+						if (this._core.settings.dotsData) {
+							this._templates.splice(e.position, 1);
+						}
+					}, this),
+					'change.owl.carousel': $.proxy(function(e) {
+						if (e.property.name == 'position') {
+							if (!this._core.state.revert && !this._core.settings.loop && this._core.settings.navRewind) {
+								var current = this._core.current(),
+									maximum = this._core.maximum(),
+									minimum = this._core.minimum();
+								e.data = e.property.value > maximum
+									? current >= maximum ? minimum : maximum
+									: e.property.value < minimum ? maximum : e.property.value;
+							}
+						}
+					}, this),
+					'changed.owl.carousel': $.proxy(function(e) {
+						if (e.property.name == 'position') {
+							this.draw();
+						}
+					}, this),
+					'refreshed.owl.carousel': $.proxy(function() {
+						if (!this._initialized) {
+							this.initialize();
+							this._initialized = true;
+						}
+						this._core.trigger('refresh', null, 'navigation');
+						this.update();
+						this.draw();
+						this._core.trigger('refreshed', null, 'navigation');
+					}, this)
+				};
+
+				// set default options
+				this._core.options = $.extend({}, Navigation.Defaults, this._core.options);
+
+				// register event handlers
+				this.$element.on(this._handlers);
+			}
+
+			/**
+			 * Default options.
+			 * @public
+			 * @todo Rename `slideBy` to `navBy`
+			 */
+			Navigation.Defaults = {
+				nav: false,
+				navRewind: true,
+				navText: [ 'prev', 'next' ],
+				navSpeed: false,
+				navElement: 'div',
+				navContainer: false,
+				navContainerClass: 'owl-nav',
+				navClass: [ 'owl-prev', 'owl-next' ],
+				slideBy: 1,
+				dotClass: 'owl-dot',
+				dotsClass: 'owl-dots',
+				dots: true,
+				dotsEach: false,
+				dotData: false,
+				dotsSpeed: false,
+				dotsContainer: false,
+				controlsClass: 'owl-controls'
+			}
+
+			/**
+			 * Initializes the layout of the plugin and extends the carousel.
+			 * @protected
+			 */
+			Navigation.prototype.initialize = function() {
+				var $container, override,
+					options = this._core.settings;
+
+				// create the indicator template
+				if (!options.dotsData) {
+					this._templates = [ $('<div>')
+						.addClass(options.dotClass)
+						.append($('<span>'))
+						.prop('outerHTML') ];
+				}
+
+				// create controls container if needed
+				if (!options.navContainer || !options.dotsContainer) {
+					this._controls.$container = $('<div>')
+						.addClass(options.controlsClass)
+						.appendTo(this.$element);
+				}
+
+				// create DOM structure for absolute navigation
+				this._controls.$indicators = options.dotsContainer ? $(options.dotsContainer)
+					: $('<div>').hide().addClass(options.dotsClass).appendTo(this._controls.$container);
+
+				this._controls.$indicators.on('click', 'div', $.proxy(function(e) {
+					var index = $(e.target).parent().is(this._controls.$indicators)
+						? $(e.target).index() : $(e.target).parent().index();
+
+					e.preventDefault();
+
+					this.to(index, options.dotsSpeed);
+				}, this));
+
+				// create DOM structure for relative navigation
+				$container = options.navContainer ? $(options.navContainer)
+					: $('<div>').addClass(options.navContainerClass).prependTo(this._controls.$container);
+
+				this._controls.$next = $('<' + options.navElement + '>');
+				this._controls.$previous = this._controls.$next.clone();
+
+				this._controls.$previous
+					.addClass(options.navClass[0])
+					.html(options.navText[0])
+					.hide()
+					.prependTo($container)
+					.on('click', $.proxy(function(e) {
+						this.prev(options.navSpeed);
+					}, this));
+				this._controls.$next
+					.addClass(options.navClass[1])
+					.html(options.navText[1])
+					.hide()
+					.appendTo($container)
+					.on('click', $.proxy(function(e) {
+						this.next(options.navSpeed);
+					}, this));
+
+				// override public methods of the carousel
+				for (override in this._overrides) {
+					this._core[override] = $.proxy(this[override], this);
+				}
+			}
+
+			/**
+			 * Destroys the plugin.
+			 * @protected
+			 */
+			Navigation.prototype.destroy = function() {
+				var handler, control, property, override;
+
+				for (handler in this._handlers) {
+					this.$element.off(handler, this._handlers[handler]);
+				}
+				for (control in this._controls) {
+					this._controls[control].remove();
+				}
+				for (override in this.overides) {
+					this._core[override] = this._overrides[override];
+				}
+				for (property in Object.getOwnPropertyNames(this)) {
+					typeof this[property] != 'function' && (this[property] = null);
+				}
+			}
+
+			/**
+			 * Updates the internal state.
+			 * @protected
+			 */
+			Navigation.prototype.update = function() {
+				var i, j, k,
+					options = this._core.settings,
+					lower = this._core.clones().length / 2,
+					upper = lower + this._core.items().length,
+					size = options.center || options.autoWidth || options.dotData
+						? 1 : options.dotsEach || options.items;
+
+				if (options.slideBy !== 'page') {
+					options.slideBy = Math.min(options.slideBy, options.items);
+				}
+
+				if (options.dots || options.slideBy == 'page') {
+					this._pages = [];
+
+					for (i = lower, j = 0, k = 0; i < upper; i++) {
+						if (j >= size || j === 0) {
+							this._pages.push({
+								start: i - lower,
+								end: i - lower + size - 1
+							});
+							j = 0, ++k;
+						}
+						j += this._core.mergers(this._core.relative(i));
+					}
+				}
+			}
+
+			/**
+			 * Draws the user interface.
+			 * @todo The option `dotData` wont work.
+			 * @protected
+			 */
+			Navigation.prototype.draw = function() {
+				var difference, i, html = '',
+					options = this._core.settings,
+					$items = this._core.$stage.children(),
+					index = this._core.relative(this._core.current());
+
+				if (options.nav && !options.loop && !options.navRewind) {
+					this._controls.$previous.toggleClass('disabled', index <= 0);
+					this._controls.$next.toggleClass('disabled', index >= this._core.maximum());
+				}
+
+				this._controls.$previous.toggle(options.nav);
+				this._controls.$next.toggle(options.nav);
+
+				if (options.dots) {
+					difference = this._pages.length - this._controls.$indicators.children().length;
+
+					if (options.dotData && difference !== 0) {
+						for (i = 0; i < this._controls.$indicators.children().length; i++) {
+							html += this._templates[this._core.relative(i)];
+						}
+						this._controls.$indicators.html(html);
+					} else if (difference > 0) {
+						html = new Array(difference + 1).join(this._templates[0]);
+						this._controls.$indicators.append(html);
+					} else if (difference < 0) {
+						this._controls.$indicators.children().slice(difference).remove();
+					}
+
+					this._controls.$indicators.find('.active').removeClass('active');
+					this._controls.$indicators.children().eq($.inArray(this.current(), this._pages)).addClass('active');
+				}
+
+				this._controls.$indicators.toggle(options.dots);
+			}
+
+			/**
+			 * Extends event data.
+			 * @protected
+			 * @param {Event} event - The event object which gets thrown.
+			 */
+			Navigation.prototype.onTrigger = function(event) {
+				var settings = this._core.settings;
+
+				event.page = {
+					index: $.inArray(this.current(), this._pages),
+					count: this._pages.length,
+					size: settings && (settings.center || settings.autoWidth || settings.dotData
+						? 1 : settings.dotsEach || settings.items)
+				};
+			}
+
+			/**
+			 * Gets the current page position of the carousel.
+			 * @protected
+			 * @returns {Number}
+			 */
+			Navigation.prototype.current = function() {
+				var index = this._core.relative(this._core.current());
+				return $.grep(this._pages, function(o) {
+					return o.start <= index && o.end >= index;
+				}).pop();
+			}
+
+			/**
+			 * Gets the current succesor/predecessor position.
+			 * @protected
+			 * @returns {Number}
+			 */
+			Navigation.prototype.getPosition = function(successor) {
+				var position, length,
+					options = this._core.settings;
+
+				if (options.slideBy == 'page') {
+					position = $.inArray(this.current(), this._pages);
+					length = this._pages.length;
+					successor ? ++position : --position;
+					position = this._pages[((position % length) + length) % length].start;
+				} else {
+					position = this._core.relative(this._core.current());
+					length = this._core.items().length;
+					successor ? position += options.slideBy : position -= options.slideBy;
+				}
+				return position;
+			}
+
+			/**
+			 * Slides to the next item or page.
+			 * @public
+			 * @param {Number} [speed=false] - The time in milliseconds for the transition.
+			 */
+			Navigation.prototype.next = function(speed) {
+				$.proxy(this._overrides.to, this._core)(this.getPosition(true), speed);
+			}
+
+			/**
+			 * Slides to the previous item or page.
+			 * @public
+			 * @param {Number} [speed=false] - The time in milliseconds for the transition.
+			 */
+			Navigation.prototype.prev = function(speed) {
+				$.proxy(this._overrides.to, this._core)(this.getPosition(false), speed);
+			}
+
+			/**
+			 * Slides to the specified item or page.
+			 * @public
+			 * @param {Number} position - The position of the item or page.
+			 * @param {Number} [speed] - The time in milliseconds for the transition.
+			 * @param {Boolean} [standard=false] - Whether to use the standard behaviour or not.
+			 */
+			Navigation.prototype.to = function(position, speed, standard) {
+				var length;
+
+				if (!standard) {
+					length = this._pages.length;
+					$.proxy(this._overrides.to, this._core)(this._pages[((position % length) + length) % length].start, speed);
+				} else {
+					$.proxy(this._overrides.to, this._core)(position, speed);
+				}
+			}
+
+			$.fn.owlCarousel.Constructor.Plugins.Navigation = Navigation;
+
+		})(window.Zepto || window.jQuery, window, document);
+
+		/**
+		 * Hash Plugin
+		 * @version 2.0.0
+		 * @author Artus Kolanowski
+		 * @license The MIT License (MIT)
+		 */
+		;(function($, window, document, undefined) {
+			'use strict';
+
+			/**
+			 * Creates the hash plugin.
+			 * @class The Hash Plugin
+			 * @param {Owl} carousel - The Owl Carousel
+			 */
+			var Hash = function(carousel) {
+				/**
+				 * Reference to the core.
+				 * @protected
+				 * @type {Owl}
+				 */
+				this._core = carousel;
+
+				/**
+				 * Hash table for the hashes.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._hashes = {};
+
+				/**
+				 * The carousel element.
+				 * @type {jQuery}
+				 */
+				this.$element = this._core.$element;
+
+				/**
+				 * All event handlers.
+				 * @protected
+				 * @type {Object}
+				 */
+				this._handlers = {
+					'initialized.owl.carousel': $.proxy(function() {
+						if (this._core.settings.startPosition == 'URLHash') {
+							$(window).trigger('hashchange.owl.navigation');
+						}
+					}, this),
+					'prepared.owl.carousel': $.proxy(function(e) {
+						var hash = $(e.content).find('[data-hash]').andSelf('[data-hash]').attr('data-hash');
+						this._hashes[hash] = e.content;
+					}, this)
+				};
+
+				// set default options
+				this._core.options = $.extend({}, Hash.Defaults, this._core.options);
+
+				// register the event handlers
+				this.$element.on(this._handlers);
+
+				// register event listener for hash navigation
+				$(window).on('hashchange.owl.navigation', $.proxy(function() {
+					var hash = window.location.hash.substring(1),
+						items = this._core.$stage.children(),
+						position = this._hashes[hash] && items.index(this._hashes[hash]) || 0;
+
+					if (!hash) {
+						return false;
+					}
+
+					this._core.to(position, false, true);
+				}, this));
+			}
+
+			/**
+			 * Default options.
+			 * @public
+			 */
+			Hash.Defaults = {
+				URLhashListener: false
+			}
+
+			/**
+			 * Destroys the plugin.
+			 * @public
+			 */
+			Hash.prototype.destroy = function() {
+				var handler, property;
+
+				$(window).off('hashchange.owl.navigation');
+
+				for (handler in this._handlers) {
+					this._core.$element.off(handler, this._handlers[handler]);
+				}
+				for (property in Object.getOwnPropertyNames(this)) {
+					typeof this[property] != 'function' && (this[property] = null);
+				}
+			}
+
+			$.fn.owlCarousel.Constructor.Plugins.Hash = Hash;
+
+		})(window.Zepto || window.jQuery, window, document);
+	});
\ No newline at end of file
diff --git a/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.config.js b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.config.js
new file mode 100644
index 000000000..f56f70928
--- /dev/null
+++ b/app/code/WeltPixel/OwlCarouselSlider/view/frontend/web/js/owl.config.js
@@ -0,0 +1,74 @@
+var OWL = {
+	init: function () {
+	},
+
+	load: function () {
+		this.arrows();
+	},
+
+	resize: function () {
+		this.arrows();
+	},
+
+	ajaxComplete: function () {
+		this.loader();
+	},
+
+	arrows: function () {
+		var carouselElement = jQuery('[class*="owl-carousel-products-"]'),
+			windowWidth = jQuery(window).width(),
+			carouselWidth = carouselElement.width(),
+			carouselContainer = carouselWidth + 120,
+			carouselControls = carouselElement.find('.owl-nav');
+
+		var rowParent = jQuery('.owl-prev').parents().find('.row').get(0);
+		var leftPosition = 0,
+			rightPosition = 0;
+		if (rowParent) {
+            leftPosition = Math.abs(parseInt(jQuery(rowParent).css('margin-left')));
+            rightPosition = Math.abs(parseInt(jQuery(rowParent).css('margin-right')));
+		}
+
+		if (carouselContainer >= windowWidth) {
+			carouselControls.addClass('fullscreen').find('.owl-prev').css({
+				'left': leftPosition,
+				'top': 0
+			});
+			carouselControls.addClass('fullscreen').find('.owl-next').css({
+				'right': rightPosition,
+				'top': 0
+			});
+		} else {
+			carouselControls.find('.owl-prev').removeClass('fullscreen').removeAttr('style');
+			carouselControls.find('.owl-next').removeClass('fullscreen').removeAttr('style');
+		}
+	},
+
+	loader: function () {
+			jQuery('.custom-slider #pre-div, .products.products-grid #pre-div').each(function(){
+				jQuery(this).fadeOut('slow');
+			});
+	}
+};
+
+require(['jquery'],
+	function ($) {
+		$(document).ready(function () {
+			OWL.init();
+		});
+
+		$(window).load(function () {
+			OWL.load();
+		});
+
+		$(document).ready(function(){
+			OWL.ajaxComplete();
+		});
+
+		var reinitTimer;
+		$(window).on('resize', function () {
+			clearTimeout(reinitTimer);
+			reinitTimer = setTimeout(OWL.resize(), 100);
+		});
+	}
+);
diff --git a/pub/media/weltpixel/owlcarouselslider/images/e/_/e.png b/pub/media/weltpixel/owlcarouselslider/images/e/_/e.png
new file mode 100644
index 0000000000000000000000000000000000000000..32a14f720f2e8543d03d36d7a62c3c40f59f59fa
GIT binary patch
literal 3703
zcmeAS@N?(olHy`uVBq!ia0y~yU}<1rVCvvtVqjos_Y{j_U|?V@4sv&5Sa(k5B?AKk
zOS+@4BLl<6e(pbstPBhcoCO|{#S9E$svykh8Km-ofq{?5)5S5QBJS;VL&gIJJO?(c
zkvUem;rkS)8qa>iA3vYTGB7ZFn;Xr*z%WhHfPtZ*gOQnmp+jPnIT{Y5iC{D{jFtqW
zCE{pxFj_5+wh2btMxzbG(N^(jt9a<PiapN!ImgPnc4f<oFANL}44$rjF6*2UngG9~
Bgb)A#

literal 0
HcmV?d00001

diff --git a/pub/media/weltpixel/owlcarouselslider/images/i/m/images-9.jpg b/pub/media/weltpixel/owlcarouselslider/images/i/m/images-9.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..72180509be9d156b38d1ab1a51b23fee7fcfa87c
GIT binary patch
literal 13004
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
LYtfX{|Gx<UR40>1

literal 0
HcmV?d00001

diff --git a/pub/media/weltpixel/owlcarouselslider/images/m/a/magento1.jpg b/pub/media/weltpixel/owlcarouselslider/images/m/a/magento1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..cb9d5961fa797e9e8262b3a00e96202bf232b2ae
GIT binary patch
literal 57882
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%0D;$OH}
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
K<4TzQ|C<1}e07ch

literal 0
HcmV?d00001

diff --git a/pub/media/weltpixel/owlcarouselslider/images/m/a/magento2.jpg b/pub/media/weltpixel/owlcarouselslider/images/m/a/magento2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2478ff0f0b3fd1de95506f6fd0e8615b2619ff0f
GIT binary patch
literal 66342
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
ArT_o{

literal 0
HcmV?d00001

-- 
GitLab